import os
import numpy as np
import matplotlib.pyplot as plt
# Returns the num channels for a passed in image np ndarray
def get_num_channels(img):
# Check for grayscale
if len(img.shape) < 3:
return 1
return img.shape[-1]
# Convert images to grayscale and print shape
def convert_grayscale(image):
weights = [0.3, 0.6, 0.1]
channels = get_num_channels(image)
if channels == 1: # Grayscale
return image
elif channels == 3: # RGB
return (image @ weights) / 255.0
elif channels == 4: # ARGB
# Only use the first 3 channels
return (image[:,:,:3] @ weights) /255.0
Load images and preprocess images and labels. I have labels and labels with spaces for each of the test images. I also tested with a few images on my own.
# Create the output path so project is organized better
OUTPUT_PATH = './output_images/'
if not os.path.exists(OUTPUT_PATH):
os.makedirs(OUTPUT_PATH)
def read_images_grayscale(filenames, path):
images = []
for fname in filenames:
image = plt.imread(f'{path}/{fname}')
print(f'{fname}')
print(f'shape: {image.shape}')
print(f'max: {image.max()}')
print(f'min: {image.min()}')
# Convert images to grayscale
gs_image = convert_grayscale(image)
print(f'shape after grayscale conversion: {gs_image.shape}')
print()
images.append(gs_image)
return images
def read_labels(filenames, path):
labels = []
for fname in filenames:
with open(f'{path}/{fname}') as f:
l = f.read().upper()
print(l)
labels.append(l)
return labels
# Read in images
PATH = './example_images'
filenames = [
'a.png',
'b.png',
'c.png',
'd.png',
'e.png',
'f.png',
'g.png',
]
images = read_images_grayscale(filenames, PATH)
TEST_PATH = './test_images'
test_filenames = [
'msg_from_annie.png',
'utes.png',
'dreams.png',
'moment.png',
'noisy_one_paragraph.jpg',
'noisy_one_sentence.jpg',
'noisy_three_sentences.jpg',
]
test_filenames_png = [x.replace('.jpg', '.png') for x in test_filenames]
test_labels_fnames = [
'msg_from_annie.txt',
'utes.txt',
'dreams.txt',
'moment.txt',
'noisy_one_paragraph.txt',
'noisy_one_sentence.txt',
'noisy_three_sentences.txt',
]
test_labels_spaces_fnames = [
'msg_from_annie_spaces.txt',
'utes_spaces.txt',
'dreams_spaces.txt',
'moment_spaces.txt',
'noisy_one_paragraph_spaces.txt',
'noisy_one_sentence_spaces.txt',
'noisy_three_sentences_spaces.txt',
]
test_images = read_images_grayscale(test_filenames, TEST_PATH)
print('\nLabels:\n')
test_labels = read_labels(test_labels_fnames, TEST_PATH)
print('\n\nLabels with spaces:\n')
test_labels_spaces = read_labels(test_labels_spaces_fnames, TEST_PATH)
a.png shape: (28, 28, 3) max: 1.0 min: 0.0 shape after grayscale conversion: (28, 28) b.png shape: (28, 28, 3) max: 1.0 min: 0.0 shape after grayscale conversion: (28, 28) c.png shape: (28, 28, 3) max: 1.0 min: 0.0 shape after grayscale conversion: (28, 28) d.png shape: (28, 28, 3) max: 1.0 min: 0.0 shape after grayscale conversion: (28, 28) e.png shape: (28, 28, 3) max: 1.0 min: 0.0 shape after grayscale conversion: (28, 28) f.png shape: (28, 28, 3) max: 1.0 min: 0.0 shape after grayscale conversion: (28, 28) g.png shape: (28, 28, 3) max: 1.0 min: 0.0 shape after grayscale conversion: (28, 28) msg_from_annie.png shape: (1010, 1639, 3) max: 1.0 min: 0.0 shape after grayscale conversion: (1010, 1639) utes.png shape: (520, 1612, 3) max: 1.0 min: 0.0 shape after grayscale conversion: (520, 1612) dreams.png shape: (243, 772, 4) max: 1.0 min: 0.12941177189350128 shape after grayscale conversion: (243, 772) moment.png shape: (460, 855, 4) max: 1.0 min: 0.0 shape after grayscale conversion: (460, 855) noisy_one_paragraph.jpg shape: (1153, 2602, 3) max: 255 min: 0 shape after grayscale conversion: (1153, 2602) noisy_one_sentence.jpg shape: (198, 2314, 3) max: 255 min: 0 shape after grayscale conversion: (198, 2314) noisy_three_sentences.jpg shape: (919, 2620, 3) max: 255 min: 0 shape after grayscale conversion: (919, 2620) Labels: BESURETODRINKYOUROVALTINE GOUTES DREAMBIGFORDREAMSIGNITEPOSSIBILITYCHASEYOURPASSIONSWITHUNWAVERINGDETERMINATIONBELIEVEINYOURSELFFORYOUARECAPABLEOFEXTRAORDINARYTHINGSREMEMBERTHATTHEJOURNEYISASIMPORTANTASTHEDESTINATION EVERYMOMENTISAFRESHBEGINNINGANEWSTARTANEWPATH LOWCARBOHYDRATEDIETSHAVEBECOMEINCREASINGLYPOPULARSUPPORTERSCLAIMTHEYARENOTABLYMOREEFFECTIVETHANOTHERDIETSFORWEIGHTLOSSANDPROVIDEOTHERHEALTHBENEFITSSUCHASLOWERBLOODPRESSUREANDIMPROVEDCHOLESTEROLLEVELSHOWEVERSOMEDOCTORSBELIEVETHESEDIETSCARRYPOTENTIALLONGTERMHEALTHRISKSAREVIEWOFTHEAVAILABLERESEARCHLITERATUREINDICATESTHATLOWCARBOHYDRATEDIETSAREHIGHLYEFFECTIVEFORSHORTTERMWEIGHTLOSSBUTTHATTHEIRLONGTERMEFFECTIVENESSISNOTSIGNIFICANTLYGREATERTHANOTHERCOMMONDIETPLANSTHEIRLONGTERMEFFECTSONCHOLESTEROLLEVELSANDBLOODPRESSUREAREUNKNOWNRESEARCHLITERATURESUGGESTSSOMEPOTENTIALFORNEGATIVEHEALTHOUTCOMESASSOCIATEDWITHINCREASEDCONSUMPTIONOFSATURATEDFATTHISCONCLUSIONPOINTSTOTHEIMPORTANCEOFFOLLOWINGABALANCEDMODERATEDIETAPPROPRIATEFORTHEINDIVIDUALASWELLASTHENEEDFORFURTHERRESEARCH YOUWILLFACEMANYDEFEATSINLIFEBUTNEVERLETYOURSELFBEDEFEATED ABSTRACTAUDIOPATTERNRECOGNITIONISANIMPORTANTRESEARCHTOPICINTHEMACHINELEARNINGAREAANDINCLUDESSEVERALTASKSSUCHASAUDIOTAGGINGACOUSTICSCENECLASSIFICATIONANDSOUNDEVENTDETECTIONRECENTLYNEURALNETWORKSHAVEBEENAPPLIEDTOSOLVEAUDIOPATTERNRECOGNITIONPROBLEMSHOWEVERPREVIOUSSYSTEMSFOCUSONSMALLDATASETSWHICHLIMITSTHEPERFORMANCEOFAUDIOPATTERNRECOGNITIONSYSTEMS Labels with spaces: BE SURE TO DRINK YOUR OVALTINE GO UTES DREAM BIG FOR DREAMS IGNITE POSSIBILITY CHASE YOUR PASSIONS WITH UNWAVERING DETERMINATION BELIEVE IN YOURSELF FOR YOU ARE CAPABLE OF EXTRAORDINARY THINGS REMEMBER THAT THE JOURNEY IS AS IMPORTANT AS THE DESTINATION EVERY MOMENT IS A FRESH BEGINNING A NEW START A NEW PATH LOW CARBOHYDRATE DIETS HAVE BECOME INCREASINGLY POPULAR SUPPORTERS CLAIM THEY ARE NOTABLY MORE EFFECTIVE THAN OTHER DIETS FOR WEIGHTLOSS AND PROVIDE OTHER HEALTH BENEFITS SUCH AS LOWER BLOOD PRESSURE AND IMPROVED CHOLESTEROL LEVELS HOWEVER SOME DOCTORS BELIEVE THESE DIETS CARRY POTENTIAL LONG TERM HEALTH RISKS ARE VIEW OF THE AVAILABLE RESEARCH LITERATURE INDICATES THAT LOW CARBOHYDRATE DIETS ARE HIGHLY EFFECTIVE FOR SHORT TERM WEIGHTLOSS BUT THAT THEIR LONG TERM EFFECTIVENESS IS NOT SIGNIFICANTLY GREATER THAN OTHER COMMON DIET PLANS THEIR LONG TERM EFFECTS ON CHOLESTEROL LEVELS AND BLOOD PRESSURE ARE UNKNOWN RESEARCH LITERATURE SUGGESTS SOME POTENTIAL FOR NEGATIVE HEALTH OUTCOMES ASSOCIATED WITH INCREASED CONSUMPTION OF SATURATED FAT THIS CONCLUSION POINTS TO THE IMPORTANCE OF FOLLOWING A BALANCED MODERATE DIET APPROPRIATE FOR THE INDIVIDUAL AS WELL AS THE NEED FOR FURTHER RESEARCH YOU WILL FACE MANY DEFEATS IN LIFE BUT NEVER LET YOURSELF BE DEFEATED ABSTRACT AUDIO PATTERN RECOGNITION IS AN IMPORTANT RESEARCH TOPIC IN THE MACHINE LEARNING AREA AND INCLUDES SEVERAL TASKS SUCH AS AUDIO TAGGING ACOUSTIC SCENE CLASSIFICATION AND SOUND EVENT DETECTION RECENTLY NEURAL NETWORKS HAVE BEEN APPLIED TO SOLVE AUDIO PATTERN RECOGNITION PROBLEMS HOWEVER PREVIOUS SYSTEMS FOCUS ON SMALL DATASETS WHICH LIMITS THE PERFORMANCE OF AUDIO PATTERN RECOGNITION SYSTEMS
Display the images. You can see the preprocessed letters and sentence images below.
def display_images(imgs, filenames, fig_name):
rows = int(np.ceil(len(images) / 4))
fig, axs = plt.subplots(rows,4, figsize=(rows*4,4))
fig.tight_layout()
for i, axe in enumerate(axs):
for j, ax in enumerate(axe):
idx = (i*4) + j
if idx < len(imgs):
ax.imshow(imgs[idx], cmap='gray')
ax.set_title(filenames[idx])
plt.suptitle('Letters')
plt.tight_layout()
plt.savefig(f'{OUTPUT_PATH}' + fig_name)
display_images(images, filenames, 'gs_images.png')
display_images(test_images, test_filenames, 'gs_test_images.png')
1. Extract Individual Characters¶
I used approved skimage functions as part of my logic in order to extract individual characters.
Preprocess by denoising the images.
In order to denoise the images, I used skimage denoise methods and tested different methods and parameters to see what worked best for denoising the images.Mask the image into foreground/background pixels using an authomatically defined threshold.
In order to do the masking on the image, I used skimage otsu thresholding function. This returns the threshold value to use and then I threshold at this value and display the thresholded image below.Extract connected components of the image. In this step you need to record the connected components which are the image characters. Also, since the order matters, you need to compare the center of each connected region to track the relative locations of consecutive characters.
In order to do the connected components, I used the skimage label and regionprops functions. I only look at connected components that are of a certain size (greater than 30 pixels), and I take the centroid of this connected component to use as the center of the connected region. I track that center in order to implement the "Recognize spaces" function later on. I extract the images for the connected components to use as input the model.
I then display the original, denoised, thresholded, and character centers for multiple images. You can see below that this method works extremely well for the handwritten examples including my additional examples. It also does a good job on the sentence. It's interesting to note the differences between the handwritten examples and the typed examples. It tends to do better on the handwritten examples than it does on the typed examples, but it still does a good job overall. It does a good job on the handwritten like typed "dreams" example below and also my "every beginning" handwritten example below.
from skimage.restoration import denoise_bilateral
from skimage.filters import threshold_otsu
from skimage.measure import label
from skimage.measure import regionprops
def extract_individual_characters(img, display=True, fname=''):
fig, axs = None, None
if display:
fig, axs = plt.subplots(1, 4, figsize=(16,3))
axs[0].imshow(img, cmap='gray')
axs[0].set_title('Original')
# denoise the images using skimage funcs
denoised_img = denoise_bilateral(img, bins=750000)
if display:
axs[1].imshow(denoised_img, cmap='gray')
axs[1].set_title('Denoised')
# automatically threshold image using otsu thresholding to forground and background pixels
threshold_val = threshold_otsu(denoised_img)
# print(f'threshold_val: {threshold_val}')
thresholded_img = denoised_img <= threshold_val
if display:
axs[2].imshow(thresholded_img, cmap='gray')
axs[2].set_title('Thresholded')
# get connected components using skimage label and regionprops
cc_labels, num_labels = label(thresholded_img, return_num=True, connectivity=2)
# print(f'total labels: {num_labels}')
props = regionprops(cc_labels)
letter_props = []
centers = []
char_images = []
for prop in props:
# So really most of these cc's are tiny, ignore the tiny ones
if prop.num_pixels > 30:
letter_props.append(prop)
centers.append(prop.centroid)
char_images.append(prop.image)
# print(f'total labels after filtering by num pixels: {len(letter_props)}')
# print(centers)
if display:
axs[3].imshow(thresholded_img)
axs[3].set_title('Centers')
for c in centers:
# channels
axs[3].plot(c[1],c[0],'bo')
plt.suptitle('Extract individual characters')
plt.tight_layout()
if fname != '':
plt.savefig(f'{OUTPUT_PATH}extract_individual_characters_{fname}')
# for char_image in char_images:
# plt.figure()
# plt.imshow(char_image, cmap='gray')
# plt.show()
return char_images, centers
char_images, centers = extract_individual_characters(test_images[2], True, fname=test_filenames_png[2])
char_images, centers = extract_individual_characters(test_images[3], True, fname=test_filenames_png[3])
char_images, centers = extract_individual_characters(test_images[4], True, fname=test_filenames_png[4])
char_images, centers = extract_individual_characters(test_images[0], True, fname=test_filenames_png[0])
char_images, centers = extract_individual_characters(test_images[1], True, fname=test_filenames_png[1])
char_images, centers = extract_individual_characters(test_images[5], True, fname=test_filenames_png[5])
char_images, centers = extract_individual_characters(test_images[6], True, fname=test_filenames_png[6])
2. Classifying Characters¶
I used/modified the class in predict.py so I could use it as needed to load the pretrained neural network and classify each character. In the first cell below, I use the CharacterPredictor class and do simple predictions on the example images, which are just simple letters. You can see the images and predictions below.
"""
defines predictor class
"""
import string
from typing import Union, Optional
from numpy import ndarray
from torch import Tensor, load, from_numpy, unsqueeze, squeeze, float32
from torch import device as _device
from torch.nn import Conv2d
from torchvision.models import resnet50
from skimage import io
class CharacterPredictor:
"""Initialize a CharacterPredictor instance with a pretrained model
Parameters
----------
model_path : str
Model file name, e.g. `model.pth`.
device : str, torch.device, optional
device where model will be ran on. default "cpu".
"""
def __init__(self, model_path: str, device: Optional[Union[str, _device]] = "cpu"):
self.device = device
# initialize model
self.model = resnet50()
self.model.conv1 = Conv2d(1, 64, kernel_size=7, stride=2, padding=3, bias=False)
self.model.load_state_dict(load(model_path, map_location="cpu"))
self.model.to(self.device)
self.model.eval()
def predict(self, char_image: Union[ndarray, Tensor]):
"""Predict a character from an image.
Parameters
----------
char_image : np.ndarray or torch.Tensor
28x28 image of a character with 0 background (black)
Returns
-------
predicted_char : str
Predicted output of model as a capital character
e.g. "A".
"""
# check if char_image is of the right type and shape
if isinstance(char_image, ndarray):
char_image = from_numpy(char_image)
elif not isinstance(char_image, Tensor):
raise TypeError(
f"expected image of type np.ndarray instead got {type(char_image)}"
)
if char_image.shape != (28, 28):
raise ValueError(
f"expected image of shape (28, 28), instead got {char_image.shape}"
)
# convert to 4D (batch, channels, x, y) and change type
char_image = unsqueeze(unsqueeze(char_image, 0), 0)
char_image = char_image.to(device=self.device, dtype=float32)
# make prediction
pred = self.model(char_image)
pred = pred.argmax(1)
predicted_char = list(string.ascii_uppercase)[pred]
return predicted_char
def predict_characters_on_examples():
# create an instance and point to the pretrained model file
predictor = CharacterPredictor(model_path="model.pth")
# get example image filepaths
example_images = os.listdir("example_images")
example_images.sort()
for example in example_images:
# load the example image as grayscale
image = io.imread(os.path.join("example_images", example), as_gray=True)
# use the CharacterPredictor.predict() function to get the character written
plt.figure()
plt.imshow(image, cmap='gray')
plt.show()
print(f"{example}: prediction - {predictor.predict(image)}")
# Make sure this doesnt error out
predict_characters_on_examples()
a.png: prediction - A
b.png: prediction - B
c.png: prediction - C
d.png: prediction - D
e.png: prediction - E
f.png: prediction - F
g.png: prediction - G
Since the model's input size is 28x28 and my extracted character sizes are not necessarily that size, I implement functions below in order to pad images with empty columns or rows and resize them to be 28x28. I also tested adding additional padding all the way around the character because the example images above tend to have a little space from the tops and sides. In my testing that seemed to result in better results. To better visualize the padding and also the prediction result on that individual character that has been padded and resized, I displayed multiple examples of the padded image and the prediction.
You can see from the examples below, that the model does very well on handwritten examples. It gets most of them correct besides a few that are more easily confused with another letter such as l or i, but does have a slightly harder time predicting the typed examples. It is likely that the pretrained model was not trained on typed text and so it has a harder time with certain fonts. On the additional font I included that looks more like handwriting it does a pretty decent job overall.
import torch
from torchvision.transforms.v2.functional import resize
def pad_image(img, additional_padding=30):
x,y = img.shape
# print(img.shape)
# print(x)
# print(y)
# Pad to equal ratio to keep shape
if x > y:
rows_to_add = x - y
out = np.zeros((x, x))
offset = rows_to_add//2
out[:,offset:offset+y] = img
img = out
elif y > x:
rows_to_add = y - x
out = np.zeros((y, y))
offset = rows_to_add//2
out[offset:offset+x,:] = img
img = out
# Pad some more for slightly better performance
x, y = img.shape
total_rows_to_add = additional_padding
offset = total_rows_to_add // 2
out = np.zeros((x+total_rows_to_add, y+total_rows_to_add))
out[offset:offset+x,offset:offset+y] = img
img = out
return img
def predict_characters_on_imgs(imgs, model = None):
# create an instance and point to the pretrained model file if no model passed in
using_custom_model = True
if model is None:
model = CharacterPredictor(model_path="model.pth")
using_custom_model = False
predictions = []
for img in imgs:
# Pad image
img = pad_image(img, 10)
# unsqueeze to get shape of C,W,H
tensor_img = unsqueeze(torch.tensor(img), 0)
# print(tensor_img.shape)
resized_img = resize(tensor_img, (28,28))
# print(resized_img.shape)
# plt.figure()
# plt.imshow(squeeze(resized_img).numpy(), cmap='gray')
# plt.show()
resized_img = squeeze(resized_img)
# channel ordering
if using_custom_model:
resized_img = resized_img.permute(1,0)
# use the CharacterPredictor.predict() function to get the character written
prediction = model.predict(resized_img)
# print(f"{prediction}")
# print()
predictions.append(prediction)
return predictions
# display some examples and predictions
def display_imgs_and_predictions(imgs, predictions, fname=''):
num_imgs = len(imgs)
cols = 6
rows = (num_imgs // cols) + 1
if rows > 4:
rows = 4
fig, axs = plt.subplots(rows, cols, figsize=(9,9))
for i, ax in enumerate(axs):
for j in range(cols):
img_idx = (i * cols) + j
if img_idx < len(imgs):
ax[j].imshow(pad_image(imgs[img_idx], 10), cmap='gray')
ax[j].set_title(f'prediction: {predictions[img_idx]}')
ax[j].set_xticks([])
ax[j].set_yticks([])
plt.suptitle('Padded/Resized Images and Predictions')
plt.tight_layout()
if fname != '':
plt.savefig(f'{OUTPUT_PATH}padded_resized_' + fname)
def display_padded_images_and_predictions(imgs, fname=''):
char_images, centers = extract_individual_characters(imgs, display=False)
predictions = predict_characters_on_imgs(char_images)
display_imgs_and_predictions(char_images, predictions, fname)
display_padded_images_and_predictions(test_images[0], test_filenames_png[0])
display_padded_images_and_predictions(test_images[1], test_filenames_png[1])
display_padded_images_and_predictions(test_images[2], test_filenames_png[2])
display_padded_images_and_predictions(test_images[3], test_filenames_png[3])
display_padded_images_and_predictions(test_images[4], test_filenames_png[4])
display_padded_images_and_predictions(test_images[5], test_filenames_png[5])
display_padded_images_and_predictions(test_images[6], test_filenames_png[6])
Recognize Spaces / Sort Character Centers¶
This code uses the character centers to sort the characters with recognizing spaces and without spaces. In order to sort character centers properly I had to use a combination of the distance from centers and character size. I first use an average character size in order derive thresholds for a custom sorting function I wrote that can sort the characters based the x locations and y locations of the characters and the threshold. I then use that derived threshold to also determine which groups of characters are together and which ones are not. After quite a bit of testing, I found that using comparisons relative to the characters size works the best, which makes sense because smaller characters will be closer together and larger characters will have centers farther apart than smaller ones. The algorithm I wrote can automatically recognize spaces and groups text into words.
In the examples below, you can see that sorting characters and recognizing spaces works well for all of the handwritten images. The character ordering and spaces are almost 100% correct for most of the handwritten examples. You can also see that the letter predictions are all pretty close to correct. It correctly sorts, spaces, and predicts my "dream" image below and correctly predicts 212/214 characters. There is a couple of characters that are incorrect but they tend to be ones that are easier to be confused with another character. Recognizing spaces works mildy well for some of the typewritten examples (it does especially well on the typed font that looks more like handwritting, the "dream" image), but does poorly at recognizing spaces on the long paragraph typewritten example. I tested alternate methods and different configurations, but my current method seemed to be the one that worked best overall for the most images consistently.
from functools import cmp_to_key
# Tuple data together so it can be sorted properly
def compile_tuples(centers, predictions, char_images):
d = []
for i in range(len(predictions)):
d.append((centers[i][0], centers[i][1], predictions[i], char_images[i].shape[0], char_images[i].shape[1]))
return d
# Find thresholds from avg character size in order to determine spaces / ordering properly
def find_threshold_from_avg(char_images, x_ratio=1.63, y_ratio=1.63):
x_total = 0
y_total = 0
for i in range(len(char_images)):
x_total += char_images[i].shape[1]
y_total += char_images[i].shape[0]
x_avg = x_total / len(char_images)
y_avg = y_total / len(char_images)
# print('Averages:')
# print(x_avg)
# print(y_avg)
x_threshold = x_avg * x_ratio
y_threshold = y_avg * y_ratio
# print('\nThresholds:')
# print(x_threshold)
# print(y_threshold)
return x_threshold, y_threshold
# Sort characters using the character size thresholds and logic for ordering
def center_sorting_func(a,b):
# Channels
y1, x1, c, y1_size, x1_size = a
y2, x2, c, y2_size, x2_size = b
x_diff = x1 - x2
y_diff = y1 - y2
x_threshold = ((x1_size + x2_size) / 2) * 0.8
y_threshold = ((y1_size + y2_size) / 2) * 0.8
if np.abs(y_diff) > y_threshold:
return -1 if y1 < y2 else 1
if np.abs(x_diff) > x_threshold:
return -1 if x1 < x2 else 1
if x1 > x2 and y1 > y2: # b up left from a
return -1
elif x1 < x2 and y1 < y2: # b down right from a
return 1
elif x1 > x2 and y1 < y2: # b down left from a
return -1
elif x1 < x2 and y1 > y2: # b up right from a
return 1
return 0
# Sort characters with predictions and centers
def get_predicted_characters_in_order(centers, predictions, sorting_func, char_images):
# Add predictions to the centers for sorting
d = compile_tuples(centers, predictions, char_images)
# Sort them
out = sorted(d, key=cmp_to_key(sorting_func))
# Output string
out = ''.join(list(map(lambda x: x[2], out)))
# print(out)
return out
# recognize spaces
def recognize_spaces(centers, predictions, char_images):
x_threshold, y_threshold = find_threshold_from_avg(char_images)
d = compile_tuples(centers, predictions, char_images)
d = sorted(d, key=cmp_to_key(center_sorting_func))
out = ''
prev_center = None
for i in range(len(d)):
curr = d[i]
y, x, c, y_size, x_size = curr
if i == 0:
out += c
prev_center = curr
continue
y_prev, x_prev, c_prev, y_size_prev, x_size_prev = prev_center
y_diff = np.abs(y_prev - y)
x_diff = np.abs(x_prev - x)
if y_diff > y_threshold or x_diff > x_threshold:
out += f' {c}'
else:
out += c
prev_center = curr
return out
# Helper for determining accuracy of character sorting and recognizing spaces
def get_correct_counts(p, label):
num_letters = len(label)
c = 0
# added offset for spaces
offset = 0
for i in range(num_letters):
idx = i + offset
if len(p) > idx:
if label[i] == p[idx]:
c += 1
else:
# Add an offset for spaces
if p[idx] == ' ' and label[i] != ' ':
offset += 1
return c, num_letters
def display_character_sorting(img, label, recognize_spacing=True):
char_images, centers = extract_individual_characters(img, display=False)
predictions = predict_characters_on_imgs(char_images)
if recognize_spacing:
out = recognize_spaces(centers, predictions, char_images)
nc, nl = get_correct_counts(out, label)
print()
print()
print(f'Actual label: {label}')
print(f'Character sorting with spaces: {out}')
print(f'Accuracy: ({nc}/{nl})')
else:
out = get_predicted_characters_in_order(centers, predictions, center_sorting_func, char_images)
nc, nl = get_correct_counts(out, label)
print()
print()
print(f'Actual label: {label}')
print(f'Character sorting without spaces: {out}')
print(f'Accuracy: ({nc}/{nl})')
display_character_sorting(test_images[0], test_labels[0], recognize_spacing=False)
display_character_sorting(test_images[0], test_labels_spaces[0], recognize_spacing=True)
display_character_sorting(test_images[1], test_labels[1], recognize_spacing=False)
display_character_sorting(test_images[1], test_labels_spaces[1], recognize_spacing=True)
display_character_sorting(test_images[2], test_labels[2], recognize_spacing=False)
display_character_sorting(test_images[2], test_labels_spaces[2], recognize_spacing=True)
display_character_sorting(test_images[3], test_labels[3], recognize_spacing=False)
display_character_sorting(test_images[3], test_labels_spaces[3], recognize_spacing=True)
display_character_sorting(test_images[4], test_labels[4], recognize_spacing=False)
display_character_sorting(test_images[4], test_labels_spaces[4], recognize_spacing=True)
display_character_sorting(test_images[5], test_labels[5], recognize_spacing=False)
display_character_sorting(test_images[5], test_labels_spaces[5], recognize_spacing=True)
display_character_sorting(test_images[6], test_labels[6], recognize_spacing=False)
display_character_sorting(test_images[6], test_labels_spaces[6], recognize_spacing=True)
Actual label: BESURETODRINKYOUROVALTINE Character sorting without spaces: BESURETODRINKYOUROVALTINE Accuracy: (25/25) Actual label: BE SURE TO DRINK YOUR OVALTINE Character sorting with spaces: BE SURE TO DRINK YOUR OVALTINE Accuracy: (30/30) Actual label: GOUTES Character sorting without spaces: GOUTES Accuracy: (6/6) Actual label: GO UTES Character sorting with spaces: GO UTES Accuracy: (7/7) Actual label: DREAMBIGFORDREAMSIGNITEPOSSIBILITYCHASEYOURPASSIONSWITHUNWAVERINGDETERMINATIONBELIEVEINYOURSELFFORYOUARECAPABLEOFEXTRAORDINARYTHINGSREMEMBERTHATTHEJOURNEYISASIMPORTANTASTHEDESTINATION Character sorting without spaces: DREAMBIGFORDREAMSIGNITEPOSSLBILITYCHASEYOURPASSIONSWITHUNWAVERINGDETERMINATIONBELIEVEINYOURSELFFORYOUARECAPABLEOFEXTRAORDINARYTHLNGSREMEMBERTHATTHEJOURNEYISASIMPORTANTASTHEDESTINATION Accuracy: (181/183) Actual label: DREAM BIG FOR DREAMS IGNITE POSSIBILITY CHASE YOUR PASSIONS WITH UNWAVERING DETERMINATION BELIEVE IN YOURSELF FOR YOU ARE CAPABLE OF EXTRAORDINARY THINGS REMEMBER THAT THE JOURNEY IS AS IMPORTANT AS THE DESTINATION Character sorting with spaces: DREAM BIG FOR DREAMS IGNITE POSSLBILITY CHASE YOUR PASSIONS WITH UNWAVERING DETERMINATION BELIEVE IN YOURSELF FOR YOU ARE CAPABLE OF EXTRAORDINARY THLNGS REMEMBER THAT THE JOURNEY IS AS IMPORTANT AS THE DESTINATION Accuracy: (212/214) Actual label: EVERYMOMENTISAFRESHBEGINNINGANEWSTARTANEWPATH Character sorting without spaces: EVERYMOMENTISAFRESHBEGINNINGANEWSTARTANEWPATH Accuracy: (45/45) Actual label: EVERY MOMENT IS A FRESH BEGINNING A NEW START A NEW PATH Character sorting with spaces: EVERY MOMENT IS A FRESH BEGINNING A NEW START A NEW PATH Accuracy: (56/56) Actual label: LOWCARBOHYDRATEDIETSHAVEBECOMEINCREASINGLYPOPULARSUPPORTERSCLAIMTHEYARENOTABLYMOREEFFECTIVETHANOTHERDIETSFORWEIGHTLOSSANDPROVIDEOTHERHEALTHBENEFITSSUCHASLOWERBLOODPRESSUREANDIMPROVEDCHOLESTEROLLEVELSHOWEVERSOMEDOCTORSBELIEVETHESEDIETSCARRYPOTENTIALLONGTERMHEALTHRISKSAREVIEWOFTHEAVAILABLERESEARCHLITERATUREINDICATESTHATLOWCARBOHYDRATEDIETSAREHIGHLYEFFECTIVEFORSHORTTERMWEIGHTLOSSBUTTHATTHEIRLONGTERMEFFECTIVENESSISNOTSIGNIFICANTLYGREATERTHANOTHERCOMMONDIETPLANSTHEIRLONGTERMEFFECTSONCHOLESTEROLLEVELSANDBLOODPRESSUREAREUNKNOWNRESEARCHLITERATURESUGGESTSSOMEPOTENTIALFORNEGATIVEHEALTHOUTCOMESASSOCIATEDWITHINCREASEDCONSUMPTIONOFSATURATEDFATTHISCONCLUSIONPOINTSTOTHEIMPORTANCEOFFOLLOWINGABALANCEDMODERATEDIETAPPROPRIATEFORTHEINDIVIDUALASWELLASTHENEEDFORFURTHERRESEARCH Character sorting without spaces: IOWCAKBOHYDRIEIITAJBJSHAVEBBCYJOMJFINCKBDSINGLYPNPULDKSUPPOKDBKSHCLAIMYSHBTIAKBNOISABLYMOKBFFFBCIIVEIHANCJTJFHJFKDIJFISFOKWBIGHTIIJSSANUPKUVIDBOIRHBKHBAIIHBBNFFIIGSSLTIHJJHCHDSIJUMJFKBIJCJNDPKBSSUKBDNDIMPROVBDCYHOIJBSTBROLITJBVJFJJSIHOWBVBIRSHUNQBUOJCITOKSBBLIBVTBIFIFSTJHFJUIBISYCARKTIPOIBNDIALLONGDTBKMHEDIJIHKISKSARBVITBVLOFDHBAVAILJABIJBKEYSHBAKCHLIVBRATUKBINDLCVDTITBSJHATLOWCAKBOHYURATBDIFYGRJSARJFHIGHLYEFFBCTIVEFUKSFJOKIIERMWFTIICHJINSSBIJITIHATDHJFLKIIOVRRIGIBRMBFFJFCDIVFTNFSSISNOIRSICNIFICANDLYTJJLGKBDTBKTHDNOVHBKJCOMMUNUIBRIPIANYSDHBIKLUNCRIFYKMYHIJBFFBCTSUNJCJYOIJJFSTBKNLLDVBLSANUBJJNOUPKBSSUREKTDBUNKNOWNKBSJFAKCHLIDDKAVURBSLTGCREIJSHDSLSOMEPOFRBNIIADFORNBRGAIIVBHBAIJTHOUDCOMBSASYHSOIIIAIBUWIIRHINCKEASBUVCONSUMPDINNOFSATIJKAJJFDFADIHISCYUNCIJUSIONPOINISHIUJTHBIMPNRIANCJFOERFOIJLOVLINCABAIANCBDMODRBKAJBDIFIAPPRNPKIADBFOKFHTBINJJIVIDLTIJJALASWJFLLASLTHFINEJFDFORFUKIRHBKKJFSHJFARCH Accuracy: (40/765) Actual label: LOW CARBOHYDRATE DIETS HAVE BECOME INCREASINGLY POPULAR SUPPORTERS CLAIM THEY ARE NOTABLY MORE EFFECTIVE THAN OTHER DIETS FOR WEIGHTLOSS AND PROVIDE OTHER HEALTH BENEFITS SUCH AS LOWER BLOOD PRESSURE AND IMPROVED CHOLESTEROL LEVELS HOWEVER SOME DOCTORS BELIEVE THESE DIETS CARRY POTENTIAL LONG TERM HEALTH RISKS ARE VIEW OF THE AVAILABLE RESEARCH LITERATURE INDICATES THAT LOW CARBOHYDRATE DIETS ARE HIGHLY EFFECTIVE FOR SHORT TERM WEIGHTLOSS BUT THAT THEIR LONG TERM EFFECTIVENESS IS NOT SIGNIFICANTLY GREATER THAN OTHER COMMON DIET PLANS THEIR LONG TERM EFFECTS ON CHOLESTEROL LEVELS AND BLOOD PRESSURE ARE UNKNOWN RESEARCH LITERATURE SUGGESTS SOME POTENTIAL FOR NEGATIVE HEALTH OUTCOMES ASSOCIATED WITH INCREASED CONSUMPTION OF SATURATED FAT THIS CONCLUSION POINTS TO THE IMPORTANCE OF FOLLOWING A BALANCED MODERATE DIET APPROPRIATE FOR THE INDIVIDUAL AS WELL AS THE NEED FOR FURTHER RESEARCH Character sorting with spaces: IO W C AKBO HYDR IE I IT A J BJS H AVE BBCYJO M JF INC KBDSINGLY PNPULDK SUPPOKDBKSH CLAIM YSHB TI AKB N OISABLY M OKB FFFBCIIVE IH AN CJT J FH JFK DIJFIS FOK W BIG HT IIJSS AN U PK UVIDB O IR HBK HBAII H BBNFFIIGS SLT I H J J H C H DS IJU M JFK BIJCJN D PKBSSU KB DN D IM PR OVBD CYH OIJBSTBROL I TJBV JFJJSI H O W BVBIR SH UNQB U O JC ITOKS BBLIBV TB IFIFS T JHFJ UIBIS YC ARK TI POIBNDIAL LO NG D TBK M HE DIJIH KISKS ARB VITB VL OF DHB AVAILJABIJB KE YSH BAKC H LIVBRATU KB IN DLCVDTITBS JH AT LO W C AKBO HYURATB DIFYG R J S AR JF HIG HLY EFFBCTIVE FUK SFJO KI IER M WFTIIC HJ INSS BIJITIH AT DH JFLK IIO V RR I G IBR M BFF JFCDIVFTNFSS IS N OIRSIC NIFIC ANDLY T J J L G KBDTBK TH DN OVHBK JC O M M U N UIBRI PIAN YS DHBIK LU NC RIFYK M Y H I J BFFBCTS U N JCJYOIJJFSTBK NL LDVBLS AN U BJJN O U PKBSSU RE K T D B U NK N O W N KBS JF AKC H LIDDKAVU RB SLTGCREIJ SH DSL SO ME PO FR BNIIAD FO R NB RG AIIVB HBAIJTH OUDC O MBS AS Y H SOIIIAIBU WIIRH INC KEASBU VC O NSU MPDIN N OF SATIJKAJ JF D FAD IHIS CYU NCIJUSIO N P OINISH IU JTHB IMPNRIANC JF OER FOIJLO VL INC A BAIANCBD M O D RBKAJB DIFI APPR NPKIADB FO K FH TB INJJIVIDLT I J J AL AS W JFLL ASL THFI NE JF D FOR FU KIR HBK K JFSH JF ARC H Accuracy: (90/895) Actual label: YOUWILLFACEMANYDEFEATSINLIFEBUTNEVERLETYOURSELFBEDEFEATED Character sorting without spaces: YOUWIDIEACBMANXDEFBATSINIIFEBUTNBVBRIETYOURSBIEBBDBEBATBD Accuracy: (39/57) Actual label: YOU WILL FACE MANY DEFEATS IN LIFE BUT NEVER LET YOURSELF BE DEFEATED Character sorting with spaces: YOU WIDI EACB MANX DEFBATS IN IIFE BUT NBVBR IET YOURSBIE BB DBEBATBD Accuracy: (51/69) Actual label: ABSTRACTAUDIOPATTERNRECOGNITIONISANIMPORTANTRESEARCHTOPICINTHEMACHINELEARNINGAREAANDINCLUDESSEVERALTASKSSUCHASAUDIOTAGGINGACOUSTICSCENECLASSIFICATIONANDSOUNDEVENTDETECTIONRECENTLYNEURALNETWORKSHAVEBEENAPPLIEDTOSOLVEAUDIOPATTERNRECOGNITIONPROBLEMSHOWEVERPREVIOUSSYSTEMSFOCUSONSMALLDATASETSWHICHLIMITSTHEPERFORMANCEOFAUDIOPATTERNRECOGNITIONSYSTEMS Character sorting without spaces: ABSIKACTAUDIOPAITBKNKBCOGNIJIONISANIMPOKTANTKBSFKCHJOPICINTHBMAYJACHINBIBDKNINGAKBAANDINCIJUDBSSBVBKALIAYSKSSUCHDSAUDIOJATGGINGACOUSIICSCTJBNBCLASSIFICDJIONDNDSOUNDBVJJFNTDBBCJIONKBCBNJLYNBUKALNBRIWORKSHAVBBBBNAPPLIBDTOSULVBAUDIOPDTTJFKNKFCOIGNIJIONPKUBLMPKRJBSHOWBVJFKJFVIOUSSYSTBMSFOCUSONSMALLDAJASTJFJSWHICHLIMIRISJHBPBKFOKMANCDBOFAUDIOPATIBKNKBCOCNIIIONSYSHJBMS Accuracy: (53/345) Actual label: ABSTRACT AUDIO PATTERN RECOGNITION IS AN IMPORTANT RESEARCH TOPIC IN THE MACHINE LEARNING AREA AND INCLUDES SEVERAL TASKS SUCH AS AUDIO TAGGING ACOUSTIC SCENE CLASSIFICATION AND SOUND EVENT DETECTION RECENTLY NEURAL NETWORKS HAVE BEEN APPLIED TO SOLVE AUDIO PATTERN RECOGNITION PROBLEMS HOWEVER PREVIOUS SYSTEMS FOCUS ON SMALL DATASETS WHICH LIMITS THE PERFORMANCE OF AUDIO PATTERN RECOGNITION SYSTEMS Character sorting with spaces: ABSIKACT AUDIO PAITBKN KBCOGNIJION IS AN IMPOKTANT KBSF KCH JOPIC IN THB MA Y JA C HINB IBDKNING AKBA AND INCIJUDBS SBVBKAL IAYSKS SUCH DS AUDIO JA TGGING ACOUSIIC SC T JBNB CLASSIFICDJION DND SOUND BV J JFNT DB BCJION KBCBNJLY NBUKAL NBRIW ORKS HAVB BBBN APPLIBD TO SULVB AUDIO PDTTJFKN KFCO IGNIJION PKUBL M PK R J B S HOWBVJFK JFVIOUS SYSTBMS FOCUS ON SMALL DAJAS T JFJS W HICH LIMIRIS JHB PBKFOKMANCDB OF AUDIO PATIBKN KBCOCNIIION SYSHJBMS Accuracy: (201/401)
Transcribe Images / Write the Output¶
Below I transcribe each of the test images and write the characters in order with/without spaces to their corresponding text files. You can see that it outputs two text files with the predicted characters. One has spaces and one does not have the spaces. I show comparisions between the actual label and the predicted label with recognizing spaces and without recognizing spaces. I also show the overall accuracy. The pretrained model does well on handwritten characters but does not do as well for typed characters except for the particular font that looks a bit more handwritten below. It could be that the pretrained model was not trained on any typed examples and so it has a harder time on those.
You can see below that the "ovaltine" (25/25), "go utes" (6/6), and "moment" (45/45) images are perfectly transcribed from the image. It also does quite well on the typed "dream" image which has a font that looks more similar to handwritting (181/183 characters are correctly predicted which is impressive). It correctly predicts (39/57) characters on the short typed example. It performs poorly on the other 2 longer typed examples; the predictions are not correct and the spaces for the longest example are not estimated as well. So overall it seems to do really well on the actual handwritten examples and on typed examples that look more like handwritting. It tends to do more poorly on certain typed examples. Potentially the pretrained model was not trained on typed examples or different fonts and so it has a harder time classifying those characters.
def image_transcription(img, label, label_spaces, path, fname, model=None):
# Extract individual characters
char_images, centers = extract_individual_characters(img)
# Pad/resize images and predict letter
predictions = predict_characters_on_imgs(char_images, model)
display_imgs_and_predictions(char_images, predictions)
# Predict string from image no spaces
sorted_str = get_predicted_characters_in_order(centers, predictions, center_sorting_func, char_images)
# print(f'\nPredicted string from image: {sorted_str}')
nc, nl = get_correct_counts(sorted_str, label)
# print()
print()
print(f'Actual label: {label}')
print(f'Predicted label without spaces: {sorted_str}')
print(f'Accuracy: ({nc}/{nl})')
with open(f'{path}/{fname.replace(".png", "").replace(".jpg", "")}_prediction.txt', 'w') as f:
f.write(sorted_str)
# Predict string from image with recognized spaces
formatted_str = recognize_spaces(centers, predictions, char_images)
# print(f'Predicted string from image with recognized spaces: {formatted_str}')
nc, nl = get_correct_counts(formatted_str, label_spaces)
print()
print()
print(f'Actual label: {label_spaces}')
print(f'Predicted label with spaces: {formatted_str}')
print(f'Accuracy: ({nc}/{nl})')
print()
with open(f'{path}/{fname.replace(".png", "").replace(".jpg", "")}_spaces_prediction.txt', 'w') as f:
f.write(formatted_str)
return formatted_str
out = image_transcription(test_images[0], test_labels[0], test_labels_spaces[0], TEST_PATH, test_filenames[0])
Actual label: BESURETODRINKYOUROVALTINE Predicted label without spaces: BESURETODRINKYOUROVALTINE Accuracy: (25/25) Actual label: BE SURE TO DRINK YOUR OVALTINE Predicted label with spaces: BE SURE TO DRINK YOUR OVALTINE Accuracy: (30/30)
out = image_transcription(test_images[1], test_labels[1], test_labels_spaces[1], TEST_PATH, test_filenames[1])
Actual label: GOUTES Predicted label without spaces: GOUTES Accuracy: (6/6) Actual label: GO UTES Predicted label with spaces: GO UTES Accuracy: (7/7)
out = image_transcription(test_images[2], test_labels[2], test_labels_spaces[2], TEST_PATH, test_filenames[2])
Actual label: DREAMBIGFORDREAMSIGNITEPOSSIBILITYCHASEYOURPASSIONSWITHUNWAVERINGDETERMINATIONBELIEVEINYOURSELFFORYOUARECAPABLEOFEXTRAORDINARYTHINGSREMEMBERTHATTHEJOURNEYISASIMPORTANTASTHEDESTINATION Predicted label without spaces: DREAMBIGFORDREAMSIGNITEPOSSLBILITYCHASEYOURPASSIONSWITHUNWAVERINGDETERMINATIONBELIEVEINYOURSELFFORYOUARECAPABLEOFEXTRAORDINARYTHLNGSREMEMBERTHATTHEJOURNEYISASIMPORTANTASTHEDESTINATION Accuracy: (181/183) Actual label: DREAM BIG FOR DREAMS IGNITE POSSIBILITY CHASE YOUR PASSIONS WITH UNWAVERING DETERMINATION BELIEVE IN YOURSELF FOR YOU ARE CAPABLE OF EXTRAORDINARY THINGS REMEMBER THAT THE JOURNEY IS AS IMPORTANT AS THE DESTINATION Predicted label with spaces: DREAM BIG FOR DREAMS IGNITE POSSLBILITY CHASE YOUR PASSIONS WITH UNWAVERING DETERMINATION BELIEVE IN YOURSELF FOR YOU ARE CAPABLE OF EXTRAORDINARY THLNGS REMEMBER THAT THE JOURNEY IS AS IMPORTANT AS THE DESTINATION Accuracy: (212/214)
out = image_transcription(test_images[3], test_labels[3], test_labels_spaces[3], TEST_PATH, test_filenames[3])
Actual label: EVERYMOMENTISAFRESHBEGINNINGANEWSTARTANEWPATH Predicted label without spaces: EVERYMOMENTISAFRESHBEGINNINGANEWSTARTANEWPATH Accuracy: (45/45) Actual label: EVERY MOMENT IS A FRESH BEGINNING A NEW START A NEW PATH Predicted label with spaces: EVERY MOMENT IS A FRESH BEGINNING A NEW START A NEW PATH Accuracy: (56/56)
out = image_transcription(test_images[4], test_labels[4], test_labels_spaces[4], TEST_PATH, test_filenames[4])
Actual label: LOWCARBOHYDRATEDIETSHAVEBECOMEINCREASINGLYPOPULARSUPPORTERSCLAIMTHEYARENOTABLYMOREEFFECTIVETHANOTHERDIETSFORWEIGHTLOSSANDPROVIDEOTHERHEALTHBENEFITSSUCHASLOWERBLOODPRESSUREANDIMPROVEDCHOLESTEROLLEVELSHOWEVERSOMEDOCTORSBELIEVETHESEDIETSCARRYPOTENTIALLONGTERMHEALTHRISKSAREVIEWOFTHEAVAILABLERESEARCHLITERATUREINDICATESTHATLOWCARBOHYDRATEDIETSAREHIGHLYEFFECTIVEFORSHORTTERMWEIGHTLOSSBUTTHATTHEIRLONGTERMEFFECTIVENESSISNOTSIGNIFICANTLYGREATERTHANOTHERCOMMONDIETPLANSTHEIRLONGTERMEFFECTSONCHOLESTEROLLEVELSANDBLOODPRESSUREAREUNKNOWNRESEARCHLITERATURESUGGESTSSOMEPOTENTIALFORNEGATIVEHEALTHOUTCOMESASSOCIATEDWITHINCREASEDCONSUMPTIONOFSATURATEDFATTHISCONCLUSIONPOINTSTOTHEIMPORTANCEOFFOLLOWINGABALANCEDMODERATEDIETAPPROPRIATEFORTHEINDIVIDUALASWELLASTHENEEDFORFURTHERRESEARCH Predicted label without spaces: IOWCAKBOHYDRIEIITAJBJSHAVEBBCYJOMJFINCKBDSINGLYPNPULDKSUPPOKDBKSHCLAIMYSHBTIAKBNOISABLYMOKBFFFBCIIVEIHANCJTJFHJFKDIJFISFOKWBIGHTIIJSSANUPKUVIDBOIRHBKHBAIIHBBNFFIIGSSLTIHJJHCHDSIJUMJFKBIJCJNDPKBSSUKBDNDIMPROVBDCYHOIJBSTBROLITJBVJFJJSIHOWBVBIRSHUNQBUOJCITOKSBBLIBVTBIFIFSTJHFJUIBISYCARKTIPOIBNDIALLONGDTBKMHEDIJIHKISKSARBVITBVLOFDHBAVAILJABIJBKEYSHBAKCHLIVBRATUKBINDLCVDTITBSJHATLOWCAKBOHYURATBDIFYGRJSARJFHIGHLYEFFBCTIVEFUKSFJOKIIERMWFTIICHJINSSBIJITIHATDHJFLKIIOVRRIGIBRMBFFJFCDIVFTNFSSISNOIRSICNIFICANDLYTJJLGKBDTBKTHDNOVHBKJCOMMUNUIBRIPIANYSDHBIKLUNCRIFYKMYHIJBFFBCTSUNJCJYOIJJFSTBKNLLDVBLSANUBJJNOUPKBSSUREKTDBUNKNOWNKBSJFAKCHLIDDKAVURBSLTGCREIJSHDSLSOMEPOFRBNIIADFORNBRGAIIVBHBAIJTHOUDCOMBSASYHSOIIIAIBUWIIRHINCKEASBUVCONSUMPDINNOFSATIJKAJJFDFADIHISCYUNCIJUSIONPOINISHIUJTHBIMPNRIANCJFOERFOIJLOVLINCABAIANCBDMODRBKAJBDIFIAPPRNPKIADBFOKFHTBINJJIVIDLTIJJALASWJFLLASLTHFINEJFDFORFUKIRHBKKJFSHJFARCH Accuracy: (40/765) Actual label: LOW CARBOHYDRATE DIETS HAVE BECOME INCREASINGLY POPULAR SUPPORTERS CLAIM THEY ARE NOTABLY MORE EFFECTIVE THAN OTHER DIETS FOR WEIGHTLOSS AND PROVIDE OTHER HEALTH BENEFITS SUCH AS LOWER BLOOD PRESSURE AND IMPROVED CHOLESTEROL LEVELS HOWEVER SOME DOCTORS BELIEVE THESE DIETS CARRY POTENTIAL LONG TERM HEALTH RISKS ARE VIEW OF THE AVAILABLE RESEARCH LITERATURE INDICATES THAT LOW CARBOHYDRATE DIETS ARE HIGHLY EFFECTIVE FOR SHORT TERM WEIGHTLOSS BUT THAT THEIR LONG TERM EFFECTIVENESS IS NOT SIGNIFICANTLY GREATER THAN OTHER COMMON DIET PLANS THEIR LONG TERM EFFECTS ON CHOLESTEROL LEVELS AND BLOOD PRESSURE ARE UNKNOWN RESEARCH LITERATURE SUGGESTS SOME POTENTIAL FOR NEGATIVE HEALTH OUTCOMES ASSOCIATED WITH INCREASED CONSUMPTION OF SATURATED FAT THIS CONCLUSION POINTS TO THE IMPORTANCE OF FOLLOWING A BALANCED MODERATE DIET APPROPRIATE FOR THE INDIVIDUAL AS WELL AS THE NEED FOR FURTHER RESEARCH Predicted label with spaces: IO W C AKBO HYDR IE I IT A J BJS H AVE BBCYJO M JF INC KBDSINGLY PNPULDK SUPPOKDBKSH CLAIM YSHB TI AKB N OISABLY M OKB FFFBCIIVE IH AN CJT J FH JFK DIJFIS FOK W BIG HT IIJSS AN U PK UVIDB O IR HBK HBAII H BBNFFIIGS SLT I H J J H C H DS IJU M JFK BIJCJN D PKBSSU KB DN D IM PR OVBD CYH OIJBSTBROL I TJBV JFJJSI H O W BVBIR SH UNQB U O JC ITOKS BBLIBV TB IFIFS T JHFJ UIBIS YC ARK TI POIBNDIAL LO NG D TBK M HE DIJIH KISKS ARB VITB VL OF DHB AVAILJABIJB KE YSH BAKC H LIVBRATU KB IN DLCVDTITBS JH AT LO W C AKBO HYURATB DIFYG R J S AR JF HIG HLY EFFBCTIVE FUK SFJO KI IER M WFTIIC HJ INSS BIJITIH AT DH JFLK IIO V RR I G IBR M BFF JFCDIVFTNFSS IS N OIRSIC NIFIC ANDLY T J J L G KBDTBK TH DN OVHBK JC O M M U N UIBRI PIAN YS DHBIK LU NC RIFYK M Y H I J BFFBCTS U N JCJYOIJJFSTBK NL LDVBLS AN U BJJN O U PKBSSU RE K T D B U NK N O W N KBS JF AKC H LIDDKAVU RB SLTGCREIJ SH DSL SO ME PO FR BNIIAD FO R NB RG AIIVB HBAIJTH OUDC O MBS AS Y H SOIIIAIBU WIIRH INC KEASBU VC O NSU MPDIN N OF SATIJKAJ JF D FAD IHIS CYU NCIJUSIO N P OINISH IU JTHB IMPNRIANC JF OER FOIJLO VL INC A BAIANCBD M O D RBKAJB DIFI APPR NPKIADB FO K FH TB INJJIVIDLT I J J AL AS W JFLL ASL THFI NE JF D FOR FU KIR HBK K JFSH JF ARC H Accuracy: (90/895)
out = image_transcription(test_images[5], test_labels[5], test_labels_spaces[5], TEST_PATH, test_filenames[5])
Actual label: YOUWILLFACEMANYDEFEATSINLIFEBUTNEVERLETYOURSELFBEDEFEATED Predicted label without spaces: YOUWIDIEACBMANXDEFBATSINIIFEBUTNBVBRIETYOURSBIEBBDBEBATBD Accuracy: (39/57) Actual label: YOU WILL FACE MANY DEFEATS IN LIFE BUT NEVER LET YOURSELF BE DEFEATED Predicted label with spaces: YOU WIDI EACB MANX DEFBATS IN IIFE BUT NBVBR IET YOURSBIE BB DBEBATBD Accuracy: (51/69)
out = image_transcription(test_images[6], test_labels[6], test_labels_spaces[6], TEST_PATH, test_filenames[6])
Actual label: ABSTRACTAUDIOPATTERNRECOGNITIONISANIMPORTANTRESEARCHTOPICINTHEMACHINELEARNINGAREAANDINCLUDESSEVERALTASKSSUCHASAUDIOTAGGINGACOUSTICSCENECLASSIFICATIONANDSOUNDEVENTDETECTIONRECENTLYNEURALNETWORKSHAVEBEENAPPLIEDTOSOLVEAUDIOPATTERNRECOGNITIONPROBLEMSHOWEVERPREVIOUSSYSTEMSFOCUSONSMALLDATASETSWHICHLIMITSTHEPERFORMANCEOFAUDIOPATTERNRECOGNITIONSYSTEMS Predicted label without spaces: ABSIKACTAUDIOPAITBKNKBCOGNIJIONISANIMPOKTANTKBSFKCHJOPICINTHBMAYJACHINBIBDKNINGAKBAANDINCIJUDBSSBVBKALIAYSKSSUCHDSAUDIOJATGGINGACOUSIICSCTJBNBCLASSIFICDJIONDNDSOUNDBVJJFNTDBBCJIONKBCBNJLYNBUKALNBRIWORKSHAVBBBBNAPPLIBDTOSULVBAUDIOPDTTJFKNKFCOIGNIJIONPKUBLMPKRJBSHOWBVJFKJFVIOUSSYSTBMSFOCUSONSMALLDAJASTJFJSWHICHLIMIRISJHBPBKFOKMANCDBOFAUDIOPATIBKNKBCOCNIIIONSYSHJBMS Accuracy: (53/345) Actual label: ABSTRACT AUDIO PATTERN RECOGNITION IS AN IMPORTANT RESEARCH TOPIC IN THE MACHINE LEARNING AREA AND INCLUDES SEVERAL TASKS SUCH AS AUDIO TAGGING ACOUSTIC SCENE CLASSIFICATION AND SOUND EVENT DETECTION RECENTLY NEURAL NETWORKS HAVE BEEN APPLIED TO SOLVE AUDIO PATTERN RECOGNITION PROBLEMS HOWEVER PREVIOUS SYSTEMS FOCUS ON SMALL DATASETS WHICH LIMITS THE PERFORMANCE OF AUDIO PATTERN RECOGNITION SYSTEMS Predicted label with spaces: ABSIKACT AUDIO PAITBKN KBCOGNIJION IS AN IMPOKTANT KBSF KCH JOPIC IN THB MA Y JA C HINB IBDKNING AKBA AND INCIJUDBS SBVBKAL IAYSKS SUCH DS AUDIO JA TGGING ACOUSIIC SC T JBNB CLASSIFICDJION DND SOUND BV J JFNT DB BCJION KBCBNJLY NBUKAL NBRIW ORKS HAVB BBBN APPLIBD TO SULVB AUDIO PDTTJFKN KFCO IGNIJION PKUBL M PK R J B S HOWBVJFK JFVIOUS SYSTBMS FOCUS ON SMALL DAJAS T JFJS W HICH LIMIRIS JHB PBKFOKMANCDB OF AUDIO PATIBKN KBCOCNIIION SYSHJBMS Accuracy: (201/401)
Train Your Own Character Classifier¶
For the extra credit part of training your own character classifier, I experimented with a similar model type that I did for Project 3 - Part 5 and experimented with different layers and base models to fine tune in order to get a model that performed decently well. After quite a few runs I ended up using the layers up to and including layer 3 in ResNet101 as a backbone and then have additional layers that I used to classify a character out of the 26 letters in the alphabet. I run quite a few different variations on the additional layers and found that this model configution performed decently well. Similarly to project 3 part 5, I used various methods such as dropout in order to reduce overfitting so that the model would generalize better and not overfit as much on the training set. I tracked the different runs I did using tensorboard in order to keep track of hyperparameter performance, how long certain models took to train, and their overall generalization. In the end below I trained two main models with the best performing hyperparameters out of all my runs. I used cross entropy loss in order to improve performance of the model in classifying the correct character and a SGD optimizer.
Overall, the models that I trained below perform similar to the pretrained model but just barely worse in accuracy on some of the examples. I go more in depth on the two models I trained below and their results further down in the notebook.
import time
import torch
import numpy as np
from torch import nn
import matplotlib.pyplot as plt
from torchvision.transforms import v2 as transforms
from torchvision.models import resnet101
from torch.utils.data import DataLoader
from torch.utils.data import random_split
from torch.utils.tensorboard import SummaryWriter
from tensorboard.backend.event_processing.event_accumulator import EventAccumulator
PyTorch has a module inorder to use and access the EMNIST dataset: https://pytorch.org/vision/main/generated/torchvision.datasets.EMNIST.html . I used this dataset in order to create my dataloaders for my training, validation, and test dataloaders. I had to do a random split on the training dataset in order to properly split the training dataset into training and validation sets. I ended up using an 80, 20 split. I also tested using different batch sizes and transforms in order to improve performance. I found that the model performed well without needing too many transformations because it didn't seem to overfit as much on the training set for this dataset compared to the dataset for project 3.
from torchvision.datasets import EMNIST
dtype = torch.float32 ## instialize the data types used in training
cpu = torch.device("cuda:0" if torch.cuda.is_available() else "cpu")
batch_size = 128
# Need to convert the image to a tensor so we can use it properly
transform = transforms.Compose([
transforms.ToTensor(),
])
test_transform = transforms.Compose([
transforms.ToTensor(),
])
# Full training set, we want a validation set too so we will split it
FullTrainingSet = EMNIST(root=".", split='letters', train=True, download=True, transform=transform)
# Split full training set into training / validation sets
TrainingSet, ValidationSet = random_split(FullTrainingSet, [.80, .20])
TestingSet = EMNIST(root=".", split='letters', train=False, download=True, transform=test_transform)
## DataLoader is a pytorch Class for iterating over a dataset
dataloader_train = DataLoader(TrainingSet, batch_size=batch_size, num_workers=4, shuffle=True, pin_memory=True)
dataloader_test = DataLoader(TestingSet, batch_size=1)
dataloader_val = DataLoader(ValidationSet, batch_size=batch_size)
class CustomCharacterPredictor(torch.nn.Module):
def __init__(self):
super(CustomCharacterPredictor, self).__init__()
self.device = 'cpu'
# resnet101 up to and including layer3
self.backbone = torch.nn.Sequential(*list(resnet101(weights='DEFAULT').children())[:-3])
# Handle the proper image size by changing the first layer
self.backbone[0] = Conv2d(1, 64, kernel_size=7, stride=2, padding=3, bias=False)
# Disable conv2d bias because of batchnorm
self.additional = torch.nn.Sequential(
torch.nn.Conv2d(1024, 256, 3, 1, 1, bias=False),
torch.nn.BatchNorm2d(256),
torch.nn.MaxPool2d(2),
torch.nn.ReLU(),
torch.nn.Flatten(),
torch.nn.Dropout(0.6),
torch.nn.Linear(256,26),
torch.nn.Softmax(),
)
def forward(self, img):
# Shape should be (n, c, m, n)
# where c is channels and n is num examples
# m and n is width and height
# Use the backbone on char img
res_out = self.backbone(img)
# Additional layers to classify the characters
o = self.additional(res_out)
return o
# Helpful method to predict on single images, rather than a whole dataloader
def predict(self, char_image: Union[ndarray, Tensor]):
# check if char_image is of the right type and shape
if isinstance(char_image, ndarray):
char_image = from_numpy(char_image)
elif not isinstance(char_image, Tensor):
raise TypeError(
f"expected image of type np.ndarray instead got {type(char_image)}"
)
if char_image.shape != (28, 28):
raise ValueError(
f"expected image of shape (28, 28), instead got {char_image.shape}"
)
# convert to 4D (batch, channels, x, y) and change type
char_image = unsqueeze(unsqueeze(char_image, 0), 0)
char_image = char_image.to(device=cpu, dtype=float32)
# predict and output the argmax index of the prediction as the character
pred = self.forward(char_image)
pred = pred.argmax(1)
predicted_char = list(string.ascii_uppercase)[pred]
return predicted_char
# Changes following pytorch.org tutorials to speed up training like not calling cpu every time.
def display_training_and_validation_loss(dir_path):
# Since I was using tensorboard to track runs, I had to look up how to access the data from tensorboard
# It lead me to some tensorflow documentation and then to here:
# https://github.com/tensorflow/tensorboard/blob/master/tensorboard/backend/event_processing/event_accumulator.py
# EventAccumulator provides a way to access data from the run
ea = EventAccumulator(dir_path)
# From that link above, the Reload() method loads all the data for the run
ea.Reload()
# This way we can access the data written during the run and display it
training_loss = ea.Scalars("training loss")
validation_loss = ea.Scalars("validation loss")
# Get data for training loss
training_loss_step = []
training_loss_loss = []
for i in range(len(training_loss)):
training_loss_step.append(training_loss[i].step)
training_loss_loss.append(training_loss[i].value)
# Get data for validation loss
validation_loss_step = []
validation_loss_loss = []
for i in range(len(validation_loss)):
validation_loss_step.append(validation_loss[i].step)
validation_loss_loss.append(validation_loss[i].value)
# Display loss curves
plt.figure()
plt.plot(validation_loss_step, validation_loss_loss, label='val loss')
plt.plot(training_loss_step, training_loss_loss, label='train loss')
plt.legend()
plt.title('Training and val loss')
plt.xlabel('Step')
plt.ylabel('Avg Loss')
plt.show()
def checkTestingCrossEntropyLoss(model, dataloader):
print()
print()
print(f'**** Running model on the testing dataset ****')
model.eval()
running_loss = 0.0
num_correct = 0
num_total = 0
loss_function = nn.CrossEntropyLoss()
for t, (imgs, labels) in enumerate(dataloader):
imgs = imgs.to(device=cpu, dtype=dtype)
labels -= 1
labels = labels.to(device=cpu, dtype=torch.long)
# Running images thru model
predictions = model(imgs)
# Calculate loss, backprop, optimize
loss = loss_function(predictions, labels)
# Track running loss
running_loss += loss.item() * len(labels)
# Track accuracy
pred_idxs = torch.argmax(predictions, dim=1)
num_correct += torch.sum(pred_idxs == labels)
num_total += len(labels)
print(f'Test total loss: {running_loss}')
print(f'Test avg loss: {running_loss/len(dataloader.dataset)}')
print(f"Test accuracy: {((num_correct/num_total)*100):.2f}% [{num_correct:>5d}/{num_total:>5d}]")
return running_loss
def get_num_channels(img):
# Check for grayscale
if len(img.shape) < 3:
return 1
return img.shape[-1]
def convert_grayscale(image):
weights = [0.3, 0.6, 0.1]
channels = get_num_channels(image)
if channels == 1: # Grayscale
return image
elif channels == 3: # RGB
return (image @ weights) / 255.0
elif channels == 4: # ARGB
# Only use the first 3 channels
return (image[:,:,:3] @ weights) /255.0
# Return ascii character from number 0-25
def get_character(idx):
return list(string.ascii_uppercase)[idx]
# Display character and prediction
def display_out(data, ax):
# print(data[0].shape)
# channels
img = data[0].permute(1,0).numpy()
ax.imshow(img, cmap="gray")
ax.set_title(f'pred: {get_character(data[2])}, actual: {get_character(data[1])}, loss: {np.round(data[3], 3)}')
return
# Display a plot of multiple characters and predictions/labels
def display_output_images(model, dataloader, train=False):
# Get images to display from test set
images = []
actual_labels = []
preds = []
cross_entropy_loss = []
num_images = 16
model.eval()
loss_function = nn.CrossEntropyLoss()
t = 0
for t, (imgs, labels) in enumerate(dataloader):
if t >= num_images:
break
if imgs.shape[0] > 1:
imgs = imgs[:1]
labels -= 1
if labels.shape[0] > 1:
labels = labels[:1]
imgs = imgs.to(device=cpu, dtype=dtype)
labels = labels.to(device=cpu, dtype=torch.long)
# Running images thru model
predictions = model(imgs)
pred_labels = torch.argmax(predictions, dim=1)
# Calculate loss, backprop, optimize
loss = loss_function(predictions, labels)
images.append(imgs.cpu().detach().squeeze())
actual_labels.append(labels.cpu().detach().squeeze())
cross_entropy_loss.append(loss.item())
preds.append(pred_labels.cpu().detach().squeeze())
cols = 4
rows = num_images // cols
idx = 0
fig, axs = plt.subplots(rows, cols, figsize=(16, 14))
for i, ax in enumerate(axs):
display_out([images[idx], actual_labels[idx], preds[idx], cross_entropy_loss[idx]], ax[0])
if idx + 1 < num_images:
display_out([images[idx + 1], actual_labels[idx + 1], preds[idx + 1], cross_entropy_loss[idx + 1]], ax[1])
if idx + 2 < num_images:
display_out([images[idx + 2], actual_labels[idx + 2], preds[idx + 2], cross_entropy_loss[idx + 2]], ax[2])
if idx + 3 < num_images:
display_out([images[idx + 3], actual_labels[idx + 3], preds[idx + 3], cross_entropy_loss[idx + 3]], ax[3])
idx += cols
dataloader_type = 'testing' if not train else 'training'
plt.suptitle(f'Output {dataloader_type} Examples')
plt.tight_layout()
plt.savefig(f'model-predictions-{dataloader_type}-examples.png')
def trainingLoop(model, optimizer, nepochs, train_dataloader, val_dataloader, test_dataloader):
curr_time = int(time.time())
run_dir = f'runs/'
run_name = f'run_{curr_time}'
writer = SummaryWriter(run_dir + run_name)
print(f'**** Starting {run_name} ****')
total_records = len(train_dataloader.dataset)
total_val_records = len(val_dataloader.dataset)
model = model.to(device=cpu)
# CrossEntropyLoss for classification problem
loss_function = nn.CrossEntropyLoss()
current_step = 0
for ep in range(nepochs):
print("Epoch", ep)
model.train()
running_loss = 0.0
num_correct = 0
num_total = 0
for t, (imgs, labels) in enumerate(train_dataloader):
imgs = imgs.to(device=cpu, dtype=dtype)
# Probably since this is matlab data(?) the labels start at 1 instead of 0
labels -= 1
labels = labels.to(device=cpu, dtype=torch.long)
# zero gradient
optimizer.zero_grad()
# Running images thru model
predictions = model(imgs)
# Calculate loss, backprop, optimize
loss = loss_function(predictions, labels)
loss.backward()
optimizer.step()
running_loss += loss.item() * len(labels)
# Track accuracy
pred_idxs = torch.argmax(predictions, dim=1)
num_correct += torch.sum(pred_idxs == labels)
num_total += len(labels)
if t % 20 == 19:
# Print current training loss and write training loss to tensorboard for tracking
# Followed this and other tutorials on pytorch.org in order to figure out how to use
# tensorboard with torch https://pytorch.org/tutorials/intermediate/tensorboard_tutorial.html
loss, current = loss.item() * len(labels), (t + 1) * batch_size
print(f"training loss: {loss:>7f} [{current:>5d}/{total_records:>5d}], accuracy {((num_correct/num_total)*100):.2f}% [{num_correct:>5d}/{num_total:>5d}]")
current_step = (ep * total_records) + ((t + 1) * batch_size)
writer.add_scalar('training loss', running_loss / ((t + 1)*batch_size), (ep * total_records) + ((t + 1) * batch_size))
print(f"training avg loss: {running_loss / total_records:>7f} [{total_records:>5d}/{total_records:>5d}]")
print(f"training accuracy: {((num_correct/num_total)*100):.2f}% [{num_correct:>5d}/{num_total:>5d}]")
current_step = ((ep+1) * total_records)
writer.add_scalar('training loss', running_loss / total_records, current_step)
# Validation step
model.eval()
running_loss = 0.0
num_correct = 0
num_total = 0
for t, (imgs, labels) in enumerate(val_dataloader):
imgs = imgs.to(device=cpu, dtype=dtype)
labels -= 1
labels = labels.to(device=cpu, dtype=torch.long)
# Running images thru model
predictions = model(imgs)
# Calculate loss, backprop, optimize
loss = loss_function(predictions, labels)
# Track running loss
running_loss += loss.item() * len(labels)
# Track accuracy
pred_idxs = torch.argmax(predictions, dim=1)
num_correct += torch.sum(pred_idxs == labels)
num_total += len(labels)
print(f"validation avg loss: {running_loss / total_val_records:>7f}")
print(f"validation accuracy: {((num_correct/num_total)*100):.2f}% [{num_correct:>5d}/{num_total:>5d}]\n")
writer.add_scalar('validation loss', running_loss / total_val_records, current_step)
print(f'saving model\n')
torch.save(model, f'{run_dir}{run_name}/model_epoch{ep}_{running_loss / total_val_records:>7f}.pth')
# Display the loss curves
display_training_and_validation_loss(run_dir + run_name + '/')
# Run model on testing dataset
checkTestingCrossEntropyLoss(model, test_dataloader)
# Display outputs for the test dataloader
display_output_images(model, test_dataloader)
# Display outputs for the train dataloader for fun
display_output_images(model, train_dataloader, True)
return True
Here are some different training runs with different hyperparameters and results. I also test the trained model on the other test images that were used with the pretrained model above.
Model 1¶
In depth discussion about model results are after the cell below.
learningRate = 1e-3 # Set this value between 1e-2 to 1e-4
weightDecay = 1e-3 # Set this value between 1e-2 to 1e-4
momentum = 0.9 # Adding momentum to potentially improve training using SGD
epochs = 30
model = CustomCharacterPredictor()
optimizer = torch.optim.SGD(model.parameters(), lr=learningRate, weight_decay=weightDecay, momentum=momentum)
res = trainingLoop(model, optimizer, epochs, dataloader_train, dataloader_val, dataloader_test)
**** Starting run_1701988179 **** Epoch 0
training loss: 417.399536 [ 2560/99840], accuracy 3.48% [ 89/ 2560] training loss: 416.717712 [ 5120/99840], accuracy 3.71% [ 190/ 5120] training loss: 416.543457 [ 7680/99840], accuracy 3.97% [ 305/ 7680] training loss: 416.257477 [10240/99840], accuracy 4.31% [ 441/10240] training loss: 416.371277 [12800/99840], accuracy 4.81% [ 616/12800] training loss: 414.638092 [15360/99840], accuracy 5.23% [ 803/15360] training loss: 414.270386 [17920/99840], accuracy 5.67% [ 1016/17920] training loss: 413.309204 [20480/99840], accuracy 6.17% [ 1263/20480] training loss: 413.589996 [23040/99840], accuracy 6.76% [ 1558/23040] training loss: 412.421204 [25600/99840], accuracy 7.25% [ 1856/25600] training loss: 407.709045 [28160/99840], accuracy 7.83% [ 2205/28160] training loss: 404.988037 [30720/99840], accuracy 8.45% [ 2595/30720] training loss: 402.902863 [33280/99840], accuracy 8.99% [ 2991/33280] training loss: 406.822144 [35840/99840], accuracy 9.48% [ 3397/35840] training loss: 407.680756 [38400/99840], accuracy 10.10% [ 3878/38400] training loss: 403.363403 [40960/99840], accuracy 10.63% [ 4356/40960] training loss: 395.166168 [43520/99840], accuracy 11.19% [ 4869/43520] training loss: 400.643799 [46080/99840], accuracy 11.73% [ 5403/46080] training loss: 397.418640 [48640/99840], accuracy 12.34% [ 6003/48640] training loss: 392.263489 [51200/99840], accuracy 12.91% [ 6608/51200] training loss: 396.486877 [53760/99840], accuracy 13.39% [ 7199/53760] training loss: 390.780945 [56320/99840], accuracy 13.98% [ 7872/56320] training loss: 395.139465 [58880/99840], accuracy 14.47% [ 8519/58880] training loss: 391.105774 [61440/99840], accuracy 14.92% [ 9167/61440] training loss: 393.452423 [64000/99840], accuracy 15.38% [ 9842/64000] training loss: 383.788086 [66560/99840], accuracy 15.80% [10517/66560] training loss: 397.488403 [69120/99840], accuracy 16.19% [11188/69120] training loss: 393.247925 [71680/99840], accuracy 16.61% [11908/71680] training loss: 394.213989 [74240/99840], accuracy 16.98% [12609/74240] training loss: 388.119476 [76800/99840], accuracy 17.39% [13354/76800] training loss: 393.660034 [79360/99840], accuracy 17.79% [14119/79360] training loss: 377.309143 [81920/99840], accuracy 18.26% [14955/81920] training loss: 382.827942 [84480/99840], accuracy 18.72% [15811/84480] training loss: 386.795959 [87040/99840], accuracy 19.18% [16696/87040] training loss: 387.133423 [89600/99840], accuracy 19.61% [17573/89600] training loss: 379.391479 [92160/99840], accuracy 20.03% [18461/92160] training loss: 380.868622 [94720/99840], accuracy 20.49% [19404/94720] training loss: 380.531189 [97280/99840], accuracy 20.86% [20296/97280] training loss: 374.013977 [99840/99840], accuracy 21.28% [21243/99840] training avg loss: 3.124815 [99840/99840] training accuracy: 21.28% [21243/99840] validation avg loss: 2.967460 validation accuracy: 36.75% [ 9172/24960] saving model Epoch 1 training loss: 378.616455 [ 2560/99840], accuracy 36.52% [ 935/ 2560] training loss: 377.128784 [ 5120/99840], accuracy 36.60% [ 1874/ 5120] training loss: 383.775360 [ 7680/99840], accuracy 37.08% [ 2848/ 7680] training loss: 379.599518 [10240/99840], accuracy 37.39% [ 3829/10240] training loss: 384.375824 [12800/99840], accuracy 37.57% [ 4809/12800] training loss: 378.512817 [15360/99840], accuracy 38.19% [ 5866/15360] training loss: 371.888916 [17920/99840], accuracy 38.71% [ 6937/17920] training loss: 380.652710 [20480/99840], accuracy 39.01% [ 7990/20480] training loss: 373.703674 [23040/99840], accuracy 39.56% [ 9115/23040] training loss: 379.337555 [25600/99840], accuracy 39.89% [10211/25600] training loss: 375.746704 [28160/99840], accuracy 40.27% [11339/28160] training loss: 370.908386 [30720/99840], accuracy 40.69% [12499/30720] training loss: 374.899414 [33280/99840], accuracy 41.08% [13671/33280] training loss: 373.948517 [35840/99840], accuracy 41.34% [14815/35840] training loss: 376.855225 [38400/99840], accuracy 41.64% [15991/38400] training loss: 370.158508 [40960/99840], accuracy 41.95% [17181/40960] training loss: 362.641052 [43520/99840], accuracy 42.36% [18435/43520] training loss: 370.276520 [46080/99840], accuracy 42.66% [19656/46080] training loss: 363.283478 [48640/99840], accuracy 43.03% [20930/48640] training loss: 370.896332 [51200/99840], accuracy 43.40% [22221/51200] training loss: 371.253906 [53760/99840], accuracy 43.75% [23522/53760] training loss: 364.010132 [56320/99840], accuracy 44.11% [24844/56320] training loss: 353.933075 [58880/99840], accuracy 44.50% [26202/58880] training loss: 366.255859 [61440/99840], accuracy 44.81% [27532/61440] training loss: 353.542542 [64000/99840], accuracy 45.14% [28892/64000] training loss: 363.566864 [66560/99840], accuracy 45.44% [30245/66560] training loss: 359.576447 [69120/99840], accuracy 45.78% [31641/69120] training loss: 362.242157 [71680/99840], accuracy 46.08% [33031/71680] training loss: 350.008026 [74240/99840], accuracy 46.41% [34457/74240] training loss: 358.629059 [76800/99840], accuracy 46.73% [35891/76800] training loss: 366.867218 [79360/99840], accuracy 47.00% [37299/79360] training loss: 362.295074 [81920/99840], accuracy 47.34% [38783/81920] training loss: 354.211060 [84480/99840], accuracy 47.63% [40241/84480] training loss: 353.502594 [87040/99840], accuracy 47.92% [41710/87040] training loss: 351.878143 [89600/99840], accuracy 48.12% [43114/89600] training loss: 355.978210 [92160/99840], accuracy 48.39% [44596/92160] training loss: 360.639343 [94720/99840], accuracy 48.62% [46053/94720] training loss: 355.369751 [97280/99840], accuracy 48.86% [47533/97280] training loss: 359.719177 [99840/99840], accuracy 49.10% [49024/99840] training avg loss: 2.863578 [99840/99840] training accuracy: 49.10% [49024/99840] validation avg loss: 2.753812 validation accuracy: 58.65% [14639/24960] saving model Epoch 2 training loss: 352.954407 [ 2560/99840], accuracy 57.54% [ 1473/ 2560] training loss: 360.744629 [ 5120/99840], accuracy 57.27% [ 2932/ 5120] training loss: 347.721405 [ 7680/99840], accuracy 57.66% [ 4428/ 7680] training loss: 346.857880 [10240/99840], accuracy 57.88% [ 5927/10240] training loss: 361.230835 [12800/99840], accuracy 58.19% [ 7448/12800] training loss: 343.559296 [15360/99840], accuracy 58.15% [ 8932/15360] training loss: 350.604492 [17920/99840], accuracy 58.39% [10464/17920] training loss: 352.765900 [20480/99840], accuracy 58.41% [11963/20480] training loss: 340.327240 [23040/99840], accuracy 58.43% [13462/23040] training loss: 347.635529 [25600/99840], accuracy 58.56% [14992/25600] training loss: 345.341400 [28160/99840], accuracy 58.87% [16577/28160] training loss: 347.555481 [30720/99840], accuracy 59.02% [18131/30720] training loss: 338.593475 [33280/99840], accuracy 59.24% [19714/33280] training loss: 349.707489 [35840/99840], accuracy 59.50% [21325/35840] training loss: 346.961121 [38400/99840], accuracy 59.72% [22933/38400] training loss: 341.882782 [40960/99840], accuracy 59.79% [24488/40960] training loss: 348.676575 [43520/99840], accuracy 59.90% [26068/43520] training loss: 347.272552 [46080/99840], accuracy 60.10% [27696/46080] training loss: 343.761810 [48640/99840], accuracy 60.19% [29276/48640] training loss: 339.881500 [51200/99840], accuracy 60.30% [30874/51200] training loss: 346.775024 [53760/99840], accuracy 60.51% [32530/53760] training loss: 353.935242 [56320/99840], accuracy 60.61% [34137/56320] training loss: 357.638519 [58880/99840], accuracy 60.70% [35739/58880] training loss: 338.737732 [61440/99840], accuracy 60.83% [37375/61440] training loss: 357.654175 [64000/99840], accuracy 60.86% [38949/64000] training loss: 342.446655 [66560/99840], accuracy 60.98% [40588/66560] training loss: 343.431244 [69120/99840], accuracy 61.05% [42200/69120] training loss: 335.609192 [71680/99840], accuracy 61.13% [43818/71680] training loss: 344.830963 [74240/99840], accuracy 61.19% [45425/74240] training loss: 346.099335 [76800/99840], accuracy 61.23% [47027/76800] training loss: 347.608521 [79360/99840], accuracy 61.31% [48658/79360] training loss: 347.849457 [81920/99840], accuracy 61.36% [50270/81920] training loss: 338.419739 [84480/99840], accuracy 61.49% [51948/84480] training loss: 346.840515 [87040/99840], accuracy 61.58% [53596/87040] training loss: 341.058075 [89600/99840], accuracy 61.70% [55282/89600] training loss: 343.135986 [92160/99840], accuracy 61.77% [56924/92160] training loss: 343.747314 [94720/99840], accuracy 61.84% [58575/94720] training loss: 349.112244 [97280/99840], accuracy 61.86% [60173/97280] training loss: 342.930206 [99840/99840], accuracy 61.96% [61856/99840] training avg loss: 2.725703 [99840/99840] training accuracy: 61.96% [61856/99840] validation avg loss: 2.670777 validation accuracy: 67.10% [16748/24960] saving model Epoch 3 training loss: 343.015533 [ 2560/99840], accuracy 67.38% [ 1725/ 2560] training loss: 336.569031 [ 5120/99840], accuracy 68.01% [ 3482/ 5120] training loss: 339.586029 [ 7680/99840], accuracy 67.15% [ 5157/ 7680] training loss: 344.850983 [10240/99840], accuracy 66.92% [ 6853/10240] training loss: 338.253845 [12800/99840], accuracy 67.38% [ 8624/12800] training loss: 341.431946 [15360/99840], accuracy 67.40% [10352/15360] training loss: 331.904907 [17920/99840], accuracy 67.61% [12115/17920] training loss: 343.358124 [20480/99840], accuracy 67.71% [13867/20480] training loss: 345.812958 [23040/99840], accuracy 67.89% [15641/23040] training loss: 339.312805 [25600/99840], accuracy 67.88% [17378/25600] training loss: 341.169250 [28160/99840], accuracy 68.06% [19166/28160] training loss: 345.569885 [30720/99840], accuracy 68.23% [20960/30720] training loss: 342.493774 [33280/99840], accuracy 68.46% [22782/33280] training loss: 335.228333 [35840/99840], accuracy 68.43% [24524/35840] training loss: 337.304016 [38400/99840], accuracy 68.42% [26274/38400] training loss: 335.820557 [40960/99840], accuracy 68.51% [28061/40960] training loss: 341.099579 [43520/99840], accuracy 68.56% [29837/43520] training loss: 330.772461 [46080/99840], accuracy 68.63% [31626/46080] training loss: 343.735138 [48640/99840], accuracy 68.61% [33371/48640] training loss: 343.213196 [51200/99840], accuracy 68.71% [35179/51200] training loss: 335.717285 [53760/99840], accuracy 68.78% [36975/53760] training loss: 345.529999 [56320/99840], accuracy 68.83% [38763/56320] training loss: 340.392456 [58880/99840], accuracy 68.95% [40595/58880] training loss: 338.224274 [61440/99840], accuracy 68.99% [42389/61440] training loss: 334.644531 [64000/99840], accuracy 69.02% [44173/64000] training loss: 336.480164 [66560/99840], accuracy 69.06% [45967/66560] training loss: 336.357239 [69120/99840], accuracy 69.11% [47770/69120] training loss: 333.578613 [71680/99840], accuracy 69.17% [49581/71680] training loss: 333.295959 [74240/99840], accuracy 69.27% [51425/74240] training loss: 344.102112 [76800/99840], accuracy 69.33% [53243/76800] training loss: 338.226196 [79360/99840], accuracy 69.39% [55066/79360] training loss: 327.975220 [81920/99840], accuracy 69.43% [56876/81920] training loss: 335.720551 [84480/99840], accuracy 69.53% [58735/84480] training loss: 339.072662 [87040/99840], accuracy 69.61% [60586/87040] training loss: 331.685089 [89600/99840], accuracy 69.65% [62407/89600] training loss: 340.980835 [92160/99840], accuracy 69.76% [64292/92160] training loss: 338.049255 [94720/99840], accuracy 69.81% [66122/94720] training loss: 335.521027 [97280/99840], accuracy 69.87% [67969/97280] training loss: 332.790863 [99840/99840], accuracy 69.92% [69812/99840] training avg loss: 2.647175 [99840/99840] training accuracy: 69.92% [69812/99840] validation avg loss: 2.607018 validation accuracy: 72.86% [18185/24960] saving model Epoch 4 training loss: 320.488220 [ 2560/99840], accuracy 72.62% [ 1859/ 2560] training loss: 341.983032 [ 5120/99840], accuracy 72.58% [ 3716/ 5120] training loss: 338.847717 [ 7680/99840], accuracy 72.67% [ 5581/ 7680] training loss: 333.096497 [10240/99840], accuracy 72.52% [ 7426/10240] training loss: 342.487762 [12800/99840], accuracy 72.56% [ 9288/12800] training loss: 334.063293 [15360/99840], accuracy 72.58% [11149/15360] training loss: 336.022369 [17920/99840], accuracy 72.50% [12992/17920] training loss: 333.989563 [20480/99840], accuracy 72.56% [14860/20480] training loss: 334.132843 [23040/99840], accuracy 72.76% [16765/23040] training loss: 336.226532 [25600/99840], accuracy 72.61% [18587/25600] training loss: 331.783051 [28160/99840], accuracy 72.65% [20458/28160] training loss: 333.688873 [30720/99840], accuracy 72.81% [22368/30720] training loss: 334.457001 [33280/99840], accuracy 72.83% [24237/33280] training loss: 330.167145 [35840/99840], accuracy 72.89% [26125/35840] training loss: 339.272369 [38400/99840], accuracy 73.03% [28044/38400] training loss: 326.126221 [40960/99840], accuracy 73.26% [30008/40960] training loss: 328.870483 [43520/99840], accuracy 73.40% [31945/43520] training loss: 333.774567 [46080/99840], accuracy 73.55% [33891/46080] training loss: 330.809204 [48640/99840], accuracy 73.68% [35836/48640] training loss: 327.948151 [51200/99840], accuracy 73.84% [37808/51200] training loss: 333.770447 [53760/99840], accuracy 73.95% [39754/53760] training loss: 325.684418 [56320/99840], accuracy 74.07% [41717/56320] training loss: 330.759918 [58880/99840], accuracy 74.14% [43652/58880] training loss: 333.526642 [61440/99840], accuracy 74.19% [45584/61440] training loss: 331.147888 [64000/99840], accuracy 74.28% [47538/64000] training loss: 334.130554 [66560/99840], accuracy 74.32% [49467/66560] training loss: 336.367737 [69120/99840], accuracy 74.40% [51426/69120] training loss: 327.191742 [71680/99840], accuracy 74.50% [53401/71680] training loss: 325.168335 [74240/99840], accuracy 74.49% [55303/74240] training loss: 332.510864 [76800/99840], accuracy 74.58% [57279/76800] training loss: 329.431793 [79360/99840], accuracy 74.64% [59235/79360] training loss: 324.195404 [81920/99840], accuracy 74.70% [61192/81920] training loss: 327.746155 [84480/99840], accuracy 74.74% [63142/84480] training loss: 322.063110 [87040/99840], accuracy 74.79% [65099/87040] training loss: 327.031799 [89600/99840], accuracy 74.81% [67027/89600] training loss: 330.993073 [92160/99840], accuracy 74.88% [69009/92160] training loss: 337.158203 [94720/99840], accuracy 74.94% [70979/94720] training loss: 323.796600 [97280/99840], accuracy 74.98% [72941/97280] training loss: 329.006683 [99840/99840], accuracy 75.03% [74910/99840] training avg loss: 2.592604 [99840/99840] training accuracy: 75.03% [74910/99840] validation avg loss: 2.561119 validation accuracy: 77.18% [19263/24960] saving model Epoch 5 training loss: 327.994568 [ 2560/99840], accuracy 77.27% [ 1978/ 2560] training loss: 328.028809 [ 5120/99840], accuracy 77.13% [ 3949/ 5120] training loss: 327.079254 [ 7680/99840], accuracy 76.98% [ 5912/ 7680] training loss: 334.338379 [10240/99840], accuracy 76.79% [ 7863/10240] training loss: 327.869537 [12800/99840], accuracy 76.85% [ 9837/12800] training loss: 325.126648 [15360/99840], accuracy 76.93% [11816/15360] training loss: 326.748047 [17920/99840], accuracy 77.12% [13820/17920] training loss: 325.065002 [20480/99840], accuracy 77.26% [15822/20480] training loss: 327.847961 [23040/99840], accuracy 77.39% [17831/23040] training loss: 323.924957 [25600/99840], accuracy 77.48% [19834/25600] training loss: 327.631378 [28160/99840], accuracy 77.51% [21826/28160] training loss: 330.305450 [30720/99840], accuracy 77.57% [23831/30720] training loss: 327.189758 [33280/99840], accuracy 77.51% [25795/33280] training loss: 327.859100 [35840/99840], accuracy 77.55% [27795/35840] training loss: 325.976166 [38400/99840], accuracy 77.54% [29777/38400] training loss: 328.674835 [40960/99840], accuracy 77.57% [31773/40960] training loss: 329.089844 [43520/99840], accuracy 77.54% [33744/43520] training loss: 321.476532 [46080/99840], accuracy 77.51% [35718/46080] training loss: 328.976990 [48640/99840], accuracy 77.46% [37678/48640] training loss: 319.325317 [51200/99840], accuracy 77.50% [39682/51200] training loss: 325.778259 [53760/99840], accuracy 77.50% [41663/53760] training loss: 335.899506 [56320/99840], accuracy 77.51% [43653/56320] training loss: 318.508484 [58880/99840], accuracy 77.56% [45666/58880] training loss: 326.475616 [61440/99840], accuracy 77.58% [47666/61440] training loss: 325.239502 [64000/99840], accuracy 77.58% [49650/64000] training loss: 328.224823 [66560/99840], accuracy 77.60% [51652/66560] training loss: 324.947998 [69120/99840], accuracy 77.54% [53599/69120] training loss: 319.598114 [71680/99840], accuracy 77.58% [55611/71680] training loss: 330.861328 [74240/99840], accuracy 77.53% [57555/74240] training loss: 323.952423 [76800/99840], accuracy 77.52% [59533/76800] training loss: 324.469879 [79360/99840], accuracy 77.51% [61514/79360] training loss: 325.509827 [81920/99840], accuracy 77.55% [63527/81920] training loss: 324.588013 [84480/99840], accuracy 77.55% [65512/84480] training loss: 329.787140 [87040/99840], accuracy 77.58% [67526/87040] training loss: 331.343811 [89600/99840], accuracy 77.60% [69533/89600] training loss: 324.644043 [92160/99840], accuracy 77.62% [71539/92160] training loss: 320.421356 [94720/99840], accuracy 77.65% [73550/94720] training loss: 330.412598 [97280/99840], accuracy 77.64% [75533/97280] training loss: 325.769165 [99840/99840], accuracy 77.67% [77550/99840] training avg loss: 2.560729 [99840/99840] training accuracy: 77.67% [77550/99840] validation avg loss: 2.547370 validation accuracy: 78.30% [19544/24960] saving model Epoch 6 training loss: 330.048828 [ 2560/99840], accuracy 78.95% [ 2021/ 2560] training loss: 328.909180 [ 5120/99840], accuracy 78.54% [ 4021/ 5120] training loss: 325.690491 [ 7680/99840], accuracy 78.01% [ 5991/ 7680] training loss: 331.461487 [10240/99840], accuracy 77.69% [ 7955/10240] training loss: 327.414734 [12800/99840], accuracy 77.66% [ 9940/12800] training loss: 322.619354 [15360/99840], accuracy 77.79% [11949/15360] training loss: 327.730103 [17920/99840], accuracy 77.98% [13974/17920] training loss: 324.343140 [20480/99840], accuracy 77.87% [15948/20480] training loss: 332.552307 [23040/99840], accuracy 78.00% [17972/23040] training loss: 321.137756 [25600/99840], accuracy 77.99% [19966/25600] training loss: 325.279907 [28160/99840], accuracy 77.92% [21943/28160] training loss: 328.631836 [30720/99840], accuracy 78.00% [23962/30720] training loss: 320.351532 [33280/99840], accuracy 78.24% [26038/33280] training loss: 331.639343 [35840/99840], accuracy 78.39% [28096/35840] training loss: 320.075104 [38400/99840], accuracy 78.47% [30132/38400] training loss: 319.371490 [40960/99840], accuracy 78.53% [32164/40960] training loss: 321.840179 [43520/99840], accuracy 78.55% [34184/43520] training loss: 325.922119 [46080/99840], accuracy 78.48% [36162/46080] training loss: 320.945068 [48640/99840], accuracy 78.45% [38157/48640] training loss: 328.095245 [51200/99840], accuracy 78.46% [40170/51200] training loss: 329.524841 [53760/99840], accuracy 78.47% [42188/53760] training loss: 325.923065 [56320/99840], accuracy 78.48% [44198/56320] training loss: 323.596039 [58880/99840], accuracy 78.49% [46215/58880] training loss: 322.035553 [61440/99840], accuracy 78.51% [48234/61440] training loss: 320.886993 [64000/99840], accuracy 78.52% [50255/64000] training loss: 321.129852 [66560/99840], accuracy 78.54% [52277/66560] training loss: 326.641449 [69120/99840], accuracy 78.56% [54302/69120] training loss: 330.655273 [71680/99840], accuracy 78.57% [56317/71680] training loss: 323.451813 [74240/99840], accuracy 78.60% [58356/74240] training loss: 324.909515 [76800/99840], accuracy 78.60% [60368/76800] training loss: 331.870453 [79360/99840], accuracy 78.57% [62355/79360] training loss: 319.542847 [81920/99840], accuracy 78.61% [64394/81920] training loss: 324.845734 [84480/99840], accuracy 78.59% [66390/84480] training loss: 322.891571 [87040/99840], accuracy 78.62% [68430/87040] training loss: 320.353180 [89600/99840], accuracy 78.64% [70461/89600] training loss: 320.244904 [92160/99840], accuracy 78.64% [72479/92160] training loss: 328.154114 [94720/99840], accuracy 78.64% [74484/94720] training loss: 321.018066 [97280/99840], accuracy 78.67% [76529/97280] training loss: 327.628418 [99840/99840], accuracy 78.66% [78536/99840] training avg loss: 2.547902 [99840/99840] training accuracy: 78.66% [78536/99840] validation avg loss: 2.540459 validation accuracy: 78.69% [19642/24960] saving model Epoch 7 training loss: 327.755920 [ 2560/99840], accuracy 78.95% [ 2021/ 2560] training loss: 325.125916 [ 5120/99840], accuracy 79.10% [ 4050/ 5120] training loss: 327.375153 [ 7680/99840], accuracy 78.59% [ 6036/ 7680] training loss: 325.426758 [10240/99840], accuracy 78.82% [ 8071/10240] training loss: 320.317902 [12800/99840], accuracy 79.05% [10118/12800] training loss: 333.266754 [15360/99840], accuracy 79.09% [12148/15360] training loss: 317.204132 [17920/99840], accuracy 79.22% [14197/17920] training loss: 322.814758 [20480/99840], accuracy 79.22% [16225/20480] training loss: 323.018860 [23040/99840], accuracy 79.17% [18240/23040] training loss: 327.461761 [25600/99840], accuracy 79.16% [20266/25600] training loss: 323.014923 [28160/99840], accuracy 79.12% [22279/28160] training loss: 323.841827 [30720/99840], accuracy 79.19% [24326/30720] training loss: 325.297058 [33280/99840], accuracy 79.37% [26415/33280] training loss: 325.800598 [35840/99840], accuracy 79.51% [28496/35840] training loss: 319.003601 [38400/99840], accuracy 79.55% [30549/38400] training loss: 323.306580 [40960/99840], accuracy 79.70% [32645/40960] training loss: 321.787231 [43520/99840], accuracy 79.83% [34743/43520] training loss: 321.169006 [46080/99840], accuracy 80.01% [36868/46080] training loss: 326.372620 [48640/99840], accuracy 80.07% [38947/48640] training loss: 327.968445 [51200/99840], accuracy 80.21% [41065/51200] training loss: 319.387512 [53760/99840], accuracy 80.32% [43178/53760] training loss: 317.658508 [56320/99840], accuracy 80.40% [45280/56320] training loss: 322.287140 [58880/99840], accuracy 80.52% [47412/58880] training loss: 327.472046 [61440/99840], accuracy 80.65% [49552/61440] training loss: 320.411072 [64000/99840], accuracy 80.72% [51663/64000] training loss: 320.446442 [66560/99840], accuracy 80.82% [53796/66560] training loss: 321.039490 [69120/99840], accuracy 80.90% [55918/69120] training loss: 326.532227 [71680/99840], accuracy 80.94% [58021/71680] training loss: 317.653748 [74240/99840], accuracy 81.03% [60158/74240] training loss: 323.632599 [76800/99840], accuracy 81.08% [62272/76800] training loss: 328.986816 [79360/99840], accuracy 81.11% [64367/79360] training loss: 325.201691 [81920/99840], accuracy 81.19% [66510/81920] training loss: 320.126831 [84480/99840], accuracy 81.22% [68614/84480] training loss: 317.829407 [87040/99840], accuracy 81.27% [70737/87040] training loss: 324.187012 [89600/99840], accuracy 81.29% [72839/89600] training loss: 334.002045 [92160/99840], accuracy 81.31% [74931/92160] training loss: 321.467255 [94720/99840], accuracy 81.36% [77061/94720] training loss: 322.811401 [97280/99840], accuracy 81.39% [79173/97280] training loss: 324.606506 [99840/99840], accuracy 81.45% [81316/99840] training avg loss: 2.520735 [99840/99840] training accuracy: 81.45% [81316/99840] validation avg loss: 2.500822 validation accuracy: 82.80% [20667/24960] saving model Epoch 8 training loss: 320.023346 [ 2560/99840], accuracy 83.32% [ 2133/ 2560] training loss: 322.619995 [ 5120/99840], accuracy 83.38% [ 4269/ 5120] training loss: 318.876251 [ 7680/99840], accuracy 83.26% [ 6394/ 7680] training loss: 318.403107 [10240/99840], accuracy 83.34% [ 8534/10240] training loss: 325.351746 [12800/99840], accuracy 83.29% [10661/12800] training loss: 318.869812 [15360/99840], accuracy 83.19% [12778/15360] training loss: 325.520782 [17920/99840], accuracy 82.98% [14870/17920] training loss: 316.621887 [20480/99840], accuracy 83.02% [17002/20480] training loss: 320.670532 [23040/99840], accuracy 83.11% [19148/23040] training loss: 324.177338 [25600/99840], accuracy 83.14% [21285/25600] training loss: 316.419495 [28160/99840], accuracy 83.04% [23383/28160] training loss: 318.664032 [30720/99840], accuracy 83.13% [25536/30720] training loss: 320.869049 [33280/99840], accuracy 82.98% [27616/33280] training loss: 324.782349 [35840/99840], accuracy 82.97% [29737/35840] training loss: 321.356354 [38400/99840], accuracy 83.07% [31899/38400] training loss: 321.792114 [40960/99840], accuracy 83.01% [34002/40960] training loss: 317.802490 [43520/99840], accuracy 83.04% [36138/43520] training loss: 317.537537 [46080/99840], accuracy 83.12% [38302/46080] training loss: 314.441071 [48640/99840], accuracy 83.07% [40403/48640] training loss: 315.113068 [51200/99840], accuracy 83.11% [42553/51200] training loss: 318.710083 [53760/99840], accuracy 83.13% [44691/53760] training loss: 313.697083 [56320/99840], accuracy 83.15% [46829/56320] training loss: 320.520050 [58880/99840], accuracy 83.16% [48963/58880] training loss: 321.419678 [61440/99840], accuracy 83.15% [51087/61440] training loss: 322.462646 [64000/99840], accuracy 83.15% [53215/64000] training loss: 320.775391 [66560/99840], accuracy 83.19% [55372/66560] training loss: 319.890015 [69120/99840], accuracy 83.21% [57512/69120] training loss: 324.378815 [71680/99840], accuracy 83.24% [59663/71680] training loss: 324.838104 [74240/99840], accuracy 83.22% [61784/74240] training loss: 324.362213 [76800/99840], accuracy 83.23% [63922/76800] training loss: 313.376587 [79360/99840], accuracy 83.28% [66090/79360] training loss: 317.786957 [81920/99840], accuracy 83.27% [68212/81920] training loss: 320.553619 [84480/99840], accuracy 83.30% [70372/84480] training loss: 319.024841 [87040/99840], accuracy 83.33% [72533/87040] training loss: 321.277222 [89600/99840], accuracy 83.30% [74640/89600] training loss: 317.784454 [92160/99840], accuracy 83.30% [76770/92160] training loss: 328.505524 [94720/99840], accuracy 83.29% [78893/94720] training loss: 314.616516 [97280/99840], accuracy 83.32% [81051/97280] training loss: 313.696472 [99840/99840], accuracy 83.29% [83156/99840] training avg loss: 2.500183 [99840/99840] training accuracy: 83.29% [83156/99840] validation avg loss: 2.494598 validation accuracy: 83.29% [20789/24960] saving model Epoch 9 training loss: 315.878815 [ 2560/99840], accuracy 83.79% [ 2145/ 2560] training loss: 325.769104 [ 5120/99840], accuracy 83.55% [ 4278/ 5120] training loss: 314.375763 [ 7680/99840], accuracy 83.93% [ 6446/ 7680] training loss: 322.228973 [10240/99840], accuracy 83.76% [ 8577/10240] training loss: 318.431976 [12800/99840], accuracy 83.84% [10732/12800] training loss: 316.128693 [15360/99840], accuracy 83.91% [12889/15360] training loss: 317.231598 [17920/99840], accuracy 83.95% [15044/17920] training loss: 321.142151 [20480/99840], accuracy 83.99% [17201/20480] training loss: 314.771576 [23040/99840], accuracy 84.08% [19373/23040] training loss: 323.736725 [25600/99840], accuracy 84.07% [21523/25600] training loss: 319.967194 [28160/99840], accuracy 83.97% [23647/28160] training loss: 318.201782 [30720/99840], accuracy 83.96% [25793/30720] training loss: 321.984375 [33280/99840], accuracy 83.98% [27950/33280] training loss: 314.610168 [35840/99840], accuracy 83.95% [30088/35840] training loss: 317.558319 [38400/99840], accuracy 83.98% [32248/38400] training loss: 320.295837 [40960/99840], accuracy 83.92% [34373/40960] training loss: 313.811737 [43520/99840], accuracy 83.99% [36551/43520] training loss: 313.666016 [46080/99840], accuracy 83.96% [38689/46080] training loss: 317.320221 [48640/99840], accuracy 84.06% [40886/48640] training loss: 318.307098 [51200/99840], accuracy 84.11% [43063/51200] training loss: 322.677643 [53760/99840], accuracy 84.14% [45231/53760] training loss: 312.943878 [56320/99840], accuracy 84.12% [47374/56320] training loss: 319.084503 [58880/99840], accuracy 84.15% [49550/58880] training loss: 318.042755 [61440/99840], accuracy 84.23% [51748/61440] training loss: 316.081177 [64000/99840], accuracy 84.22% [53898/64000] training loss: 319.593201 [66560/99840], accuracy 84.28% [56096/66560] training loss: 316.511353 [69120/99840], accuracy 84.27% [58247/69120] training loss: 317.757324 [71680/99840], accuracy 84.28% [60412/71680] training loss: 315.169525 [74240/99840], accuracy 84.31% [62591/74240] training loss: 316.066528 [76800/99840], accuracy 84.33% [64769/76800] training loss: 319.960144 [79360/99840], accuracy 84.33% [66927/79360] training loss: 322.848724 [81920/99840], accuracy 84.34% [69090/81920] training loss: 324.211243 [84480/99840], accuracy 84.37% [71275/84480] training loss: 325.956146 [87040/99840], accuracy 84.41% [73469/87040] training loss: 316.943451 [89600/99840], accuracy 84.43% [75652/89600] training loss: 318.529602 [92160/99840], accuracy 84.46% [77836/92160] training loss: 313.180267 [94720/99840], accuracy 84.48% [80016/94720] training loss: 317.771118 [97280/99840], accuracy 84.45% [82151/97280] training loss: 317.803772 [99840/99840], accuracy 84.47% [84331/99840] training avg loss: 2.488328 [99840/99840] training accuracy: 84.47% [84331/99840] validation avg loss: 2.481041 validation accuracy: 84.73% [21148/24960] saving model Epoch 10 training loss: 318.328491 [ 2560/99840], accuracy 84.73% [ 2169/ 2560] training loss: 317.443787 [ 5120/99840], accuracy 84.94% [ 4349/ 5120] training loss: 319.133972 [ 7680/99840], accuracy 85.17% [ 6541/ 7680] training loss: 321.829376 [10240/99840], accuracy 85.10% [ 8714/10240] training loss: 314.810516 [12800/99840], accuracy 85.24% [10911/12800] training loss: 319.710999 [15360/99840], accuracy 85.27% [13097/15360] training loss: 310.207214 [17920/99840], accuracy 85.46% [15314/17920] training loss: 321.370972 [20480/99840], accuracy 85.42% [17495/20480] training loss: 319.957092 [23040/99840], accuracy 85.43% [19683/23040] training loss: 313.042847 [25600/99840], accuracy 85.46% [21878/25600] training loss: 316.013916 [28160/99840], accuracy 85.50% [24078/28160] training loss: 317.168427 [30720/99840], accuracy 85.55% [26281/30720] training loss: 312.686737 [33280/99840], accuracy 85.55% [28470/33280] training loss: 310.853760 [35840/99840], accuracy 85.55% [30661/35840] training loss: 322.112946 [38400/99840], accuracy 85.55% [32853/38400] training loss: 317.381897 [40960/99840], accuracy 85.52% [35029/40960] training loss: 319.063965 [43520/99840], accuracy 85.56% [37237/43520] training loss: 324.582458 [46080/99840], accuracy 85.53% [39413/46080] training loss: 310.036896 [48640/99840], accuracy 85.53% [41601/48640] training loss: 320.012543 [51200/99840], accuracy 85.53% [43793/51200] training loss: 313.695251 [53760/99840], accuracy 85.53% [45979/53760] training loss: 317.712036 [56320/99840], accuracy 85.47% [48137/56320] training loss: 323.598328 [58880/99840], accuracy 85.49% [50336/58880] training loss: 315.840424 [61440/99840], accuracy 85.51% [52536/61440] training loss: 313.656830 [64000/99840], accuracy 85.52% [54732/64000] training loss: 320.159424 [66560/99840], accuracy 85.52% [56920/66560] training loss: 320.441864 [69120/99840], accuracy 85.53% [59115/69120] training loss: 318.451904 [71680/99840], accuracy 85.54% [61315/71680] training loss: 317.295105 [74240/99840], accuracy 85.56% [63517/74240] training loss: 318.850830 [76800/99840], accuracy 85.55% [65704/76800] training loss: 320.650726 [79360/99840], accuracy 85.57% [67912/79360] training loss: 317.232391 [81920/99840], accuracy 85.64% [70157/81920] training loss: 313.638794 [84480/99840], accuracy 85.64% [72349/84480] training loss: 313.958374 [87040/99840], accuracy 85.67% [74564/87040] training loss: 314.149506 [89600/99840], accuracy 85.71% [76796/89600] training loss: 314.400208 [92160/99840], accuracy 85.74% [79014/92160] training loss: 321.202057 [94720/99840], accuracy 85.75% [81219/94720] training loss: 318.706757 [97280/99840], accuracy 85.75% [83414/97280] training loss: 313.601318 [99840/99840], accuracy 85.77% [85636/99840] training avg loss: 2.474809 [99840/99840] training accuracy: 85.77% [85636/99840] validation avg loss: 2.470604 validation accuracy: 85.76% [21405/24960] saving model Epoch 11 training loss: 311.569977 [ 2560/99840], accuracy 85.43% [ 2187/ 2560] training loss: 313.308380 [ 5120/99840], accuracy 85.76% [ 4391/ 5120] training loss: 313.737061 [ 7680/99840], accuracy 86.07% [ 6610/ 7680] training loss: 314.915283 [10240/99840], accuracy 86.21% [ 8828/10240] training loss: 313.610138 [12800/99840], accuracy 86.41% [11061/12800] training loss: 311.376343 [15360/99840], accuracy 86.50% [13286/15360] training loss: 315.748627 [17920/99840], accuracy 86.46% [15493/17920] training loss: 312.360657 [20480/99840], accuracy 86.57% [17729/20480] training loss: 315.118042 [23040/99840], accuracy 86.64% [19961/23040] training loss: 311.847046 [25600/99840], accuracy 86.69% [22193/25600] training loss: 325.342499 [28160/99840], accuracy 86.62% [24393/28160] training loss: 311.450684 [30720/99840], accuracy 86.54% [26586/30720] training loss: 311.431061 [33280/99840], accuracy 86.59% [28816/33280] training loss: 319.731781 [35840/99840], accuracy 86.57% [31025/35840] training loss: 317.314484 [38400/99840], accuracy 86.62% [33263/38400] training loss: 316.880554 [40960/99840], accuracy 86.60% [35471/40960] training loss: 319.601471 [43520/99840], accuracy 86.65% [37710/43520] training loss: 317.140198 [46080/99840], accuracy 86.69% [39947/46080] training loss: 313.127655 [48640/99840], accuracy 86.74% [42192/48640] training loss: 315.914307 [51200/99840], accuracy 86.84% [44463/51200] training loss: 315.989716 [53760/99840], accuracy 86.95% [46746/53760] training loss: 314.572021 [56320/99840], accuracy 87.02% [49012/56320] training loss: 310.152069 [58880/99840], accuracy 87.13% [51302/58880] training loss: 307.158569 [61440/99840], accuracy 87.25% [53608/61440] training loss: 317.677551 [64000/99840], accuracy 87.29% [55868/64000] training loss: 306.967957 [66560/99840], accuracy 87.41% [58178/66560] training loss: 309.772705 [69120/99840], accuracy 87.51% [60487/69120] training loss: 311.009613 [71680/99840], accuracy 87.57% [62769/71680] training loss: 308.645142 [74240/99840], accuracy 87.68% [65090/74240] training loss: 313.324615 [76800/99840], accuracy 87.72% [67366/76800] training loss: 314.007477 [79360/99840], accuracy 87.76% [69650/79360] training loss: 317.886230 [81920/99840], accuracy 87.84% [71957/81920] training loss: 314.011536 [84480/99840], accuracy 87.88% [74242/84480] training loss: 312.762726 [87040/99840], accuracy 87.96% [76558/87040] training loss: 312.702393 [89600/99840], accuracy 88.01% [78855/89600] training loss: 313.049469 [92160/99840], accuracy 88.04% [81140/92160] training loss: 315.031830 [94720/99840], accuracy 88.08% [83430/94720] training loss: 316.222748 [97280/99840], accuracy 88.11% [85715/97280] training loss: 303.412384 [99840/99840], accuracy 88.19% [88049/99840] training avg loss: 2.452191 [99840/99840] training accuracy: 88.19% [88049/99840] validation avg loss: 2.432534 validation accuracy: 89.69% [22386/24960] saving model Epoch 12 training loss: 315.833893 [ 2560/99840], accuracy 89.26% [ 2285/ 2560] training loss: 312.303619 [ 5120/99840], accuracy 89.49% [ 4582/ 5120] training loss: 310.105408 [ 7680/99840], accuracy 89.95% [ 6908/ 7680] training loss: 314.518494 [10240/99840], accuracy 89.83% [ 9199/10240] training loss: 308.443726 [12800/99840], accuracy 89.99% [11519/12800] training loss: 309.695251 [15360/99840], accuracy 90.09% [13838/15360] training loss: 305.630524 [17920/99840], accuracy 90.23% [16169/17920] training loss: 314.515106 [20480/99840], accuracy 90.22% [18477/20480] training loss: 311.166077 [23040/99840], accuracy 90.23% [20789/23040] training loss: 313.138550 [25600/99840], accuracy 90.21% [23093/25600] training loss: 308.563782 [28160/99840], accuracy 90.21% [25402/28160] training loss: 310.604919 [30720/99840], accuracy 90.17% [27701/30720] training loss: 308.282959 [33280/99840], accuracy 90.15% [30003/33280] training loss: 309.075562 [35840/99840], accuracy 90.19% [32325/35840] training loss: 309.786316 [38400/99840], accuracy 90.16% [34621/38400] training loss: 309.269409 [40960/99840], accuracy 90.18% [36936/40960] training loss: 308.175385 [43520/99840], accuracy 90.17% [39243/43520] training loss: 309.193817 [46080/99840], accuracy 90.23% [41576/46080] training loss: 314.939606 [48640/99840], accuracy 90.24% [43892/48640] training loss: 310.319946 [51200/99840], accuracy 90.25% [46207/51200] training loss: 312.107422 [53760/99840], accuracy 90.27% [48529/53760] training loss: 309.759949 [56320/99840], accuracy 90.29% [50852/56320] training loss: 308.161560 [58880/99840], accuracy 90.32% [53183/58880] training loss: 311.854187 [61440/99840], accuracy 90.35% [55510/61440] training loss: 312.363251 [64000/99840], accuracy 90.37% [57837/64000] training loss: 312.310120 [66560/99840], accuracy 90.36% [60143/66560] training loss: 310.966248 [69120/99840], accuracy 90.36% [62460/69120] training loss: 315.843689 [71680/99840], accuracy 90.34% [64755/71680] training loss: 308.459015 [74240/99840], accuracy 90.33% [67061/74240] training loss: 305.375671 [76800/99840], accuracy 90.32% [69368/76800] training loss: 309.555786 [79360/99840], accuracy 90.32% [71680/79360] training loss: 311.975739 [81920/99840], accuracy 90.31% [73979/81920] training loss: 307.098480 [84480/99840], accuracy 90.31% [76290/84480] training loss: 308.604401 [87040/99840], accuracy 90.29% [78587/87040] training loss: 309.605713 [89600/99840], accuracy 90.29% [80902/89600] training loss: 305.226318 [92160/99840], accuracy 90.28% [83202/92160] training loss: 316.470428 [94720/99840], accuracy 90.27% [85502/94720] training loss: 314.212769 [97280/99840], accuracy 90.27% [87817/97280] training loss: 315.612854 [99840/99840], accuracy 90.25% [90104/99840] training avg loss: 2.429977 [99840/99840] training accuracy: 90.25% [90104/99840] validation avg loss: 2.428530 validation accuracy: 89.91% [22441/24960] saving model Epoch 13 training loss: 307.886475 [ 2560/99840], accuracy 90.20% [ 2309/ 2560] training loss: 309.261047 [ 5120/99840], accuracy 90.68% [ 4643/ 5120] training loss: 311.926483 [ 7680/99840], accuracy 90.72% [ 6967/ 7680] training loss: 310.480499 [10240/99840], accuracy 90.62% [ 9280/10240] training loss: 308.678986 [12800/99840], accuracy 90.74% [11615/12800] training loss: 312.475739 [15360/99840], accuracy 90.82% [13950/15360] training loss: 313.002350 [17920/99840], accuracy 90.83% [16276/17920] training loss: 308.003693 [20480/99840], accuracy 90.87% [18610/20480] training loss: 311.850555 [23040/99840], accuracy 90.86% [20934/23040] training loss: 307.429749 [25600/99840], accuracy 90.78% [23240/25600] training loss: 309.666321 [28160/99840], accuracy 90.70% [25542/28160] training loss: 310.924805 [30720/99840], accuracy 90.74% [27874/30720] training loss: 313.149750 [33280/99840], accuracy 90.72% [30190/33280] training loss: 309.354095 [35840/99840], accuracy 90.70% [32507/35840] training loss: 309.913025 [38400/99840], accuracy 90.68% [34821/38400] training loss: 311.200684 [40960/99840], accuracy 90.66% [37136/40960] training loss: 315.337952 [43520/99840], accuracy 90.62% [39438/43520] training loss: 306.271759 [46080/99840], accuracy 90.58% [41738/46080] training loss: 307.684784 [48640/99840], accuracy 90.65% [44091/48640] training loss: 312.924683 [51200/99840], accuracy 90.63% [46404/51200] training loss: 306.501740 [53760/99840], accuracy 90.62% [48715/53760] training loss: 313.588470 [56320/99840], accuracy 90.65% [51054/56320] training loss: 305.948334 [58880/99840], accuracy 90.71% [53411/58880] training loss: 310.074585 [61440/99840], accuracy 90.70% [55726/61440] training loss: 309.699280 [64000/99840], accuracy 90.69% [58042/64000] training loss: 312.774933 [66560/99840], accuracy 90.70% [60373/66560] training loss: 307.970245 [69120/99840], accuracy 90.69% [62687/69120] training loss: 311.545197 [71680/99840], accuracy 90.68% [64996/71680] training loss: 306.844818 [74240/99840], accuracy 90.71% [67345/74240] training loss: 311.932526 [76800/99840], accuracy 90.75% [69699/76800] training loss: 307.412476 [79360/99840], accuracy 90.75% [72021/79360] training loss: 316.307343 [81920/99840], accuracy 90.75% [74345/81920] training loss: 308.555389 [84480/99840], accuracy 90.75% [76662/84480] training loss: 308.510651 [87040/99840], accuracy 90.76% [78995/87040] training loss: 308.034271 [89600/99840], accuracy 90.76% [81317/89600] training loss: 309.651581 [92160/99840], accuracy 90.76% [83648/92160] training loss: 316.610748 [94720/99840], accuracy 90.75% [85960/94720] training loss: 312.011627 [97280/99840], accuracy 90.73% [88261/97280] training loss: 307.058655 [99840/99840], accuracy 90.74% [90597/99840] training avg loss: 2.424225 [99840/99840] training accuracy: 90.74% [90597/99840] validation avg loss: 2.426128 validation accuracy: 90.15% [22502/24960] saving model Epoch 14 training loss: 309.549408 [ 2560/99840], accuracy 90.94% [ 2328/ 2560] training loss: 316.626709 [ 5120/99840], accuracy 90.84% [ 4651/ 5120] training loss: 316.634796 [ 7680/99840], accuracy 90.94% [ 6984/ 7680] training loss: 307.756256 [10240/99840], accuracy 90.90% [ 9308/10240] training loss: 318.004852 [12800/99840], accuracy 90.76% [11617/12800] training loss: 310.628876 [15360/99840], accuracy 90.74% [13938/15360] training loss: 309.929626 [17920/99840], accuracy 90.86% [16283/17920] training loss: 310.753662 [20480/99840], accuracy 90.89% [18614/20480] training loss: 311.082275 [23040/99840], accuracy 90.94% [20952/23040] training loss: 312.257355 [25600/99840], accuracy 90.91% [23273/25600] training loss: 305.798492 [28160/99840], accuracy 90.94% [25609/28160] training loss: 310.695526 [30720/99840], accuracy 90.98% [27948/30720] training loss: 306.342163 [33280/99840], accuracy 90.97% [30274/33280] training loss: 311.469391 [35840/99840], accuracy 90.91% [32581/35840] training loss: 311.090057 [38400/99840], accuracy 90.86% [34889/38400] training loss: 308.859222 [40960/99840], accuracy 90.83% [37206/40960] training loss: 306.969391 [43520/99840], accuracy 90.88% [39552/43520] training loss: 311.809021 [46080/99840], accuracy 90.85% [41864/46080] training loss: 308.796783 [48640/99840], accuracy 90.91% [44217/48640] training loss: 309.589233 [51200/99840], accuracy 90.98% [46580/51200] training loss: 310.385406 [53760/99840], accuracy 90.97% [48903/53760] training loss: 306.713318 [56320/99840], accuracy 90.99% [51243/56320] training loss: 310.417877 [58880/99840], accuracy 91.04% [53604/58880] training loss: 306.453033 [61440/99840], accuracy 91.01% [55917/61440] training loss: 310.137604 [64000/99840], accuracy 91.00% [58241/64000] training loss: 314.121063 [66560/99840], accuracy 91.00% [60569/66560] training loss: 312.402161 [69120/99840], accuracy 91.00% [62899/69120] training loss: 305.432495 [71680/99840], accuracy 90.98% [65218/71680] training loss: 312.137970 [74240/99840], accuracy 91.00% [67558/74240] training loss: 309.375427 [76800/99840], accuracy 91.00% [69886/76800] training loss: 307.609772 [79360/99840], accuracy 91.01% [72222/79360] training loss: 309.780640 [81920/99840], accuracy 91.00% [74548/81920] training loss: 305.317108 [84480/99840], accuracy 91.00% [76877/84480] training loss: 302.097870 [87040/99840], accuracy 90.99% [79198/87040] training loss: 306.534607 [89600/99840], accuracy 91.00% [81534/89600] training loss: 311.855194 [92160/99840], accuracy 90.99% [83858/92160] training loss: 309.663849 [94720/99840], accuracy 91.01% [86209/94720] training loss: 312.753967 [97280/99840], accuracy 91.01% [88530/97280] training loss: 312.055054 [99840/99840], accuracy 91.01% [90869/99840] training avg loss: 2.420370 [99840/99840] training accuracy: 91.01% [90869/99840] validation avg loss: 2.424083 validation accuracy: 90.28% [22535/24960] saving model Epoch 15 training loss: 309.062012 [ 2560/99840], accuracy 91.37% [ 2339/ 2560] training loss: 306.369141 [ 5120/99840], accuracy 91.50% [ 4685/ 5120] training loss: 304.453461 [ 7680/99840], accuracy 91.51% [ 7028/ 7680] training loss: 310.312500 [10240/99840], accuracy 91.59% [ 9379/10240] training loss: 309.731506 [12800/99840], accuracy 91.41% [11701/12800] training loss: 309.905426 [15360/99840], accuracy 91.35% [14032/15360] training loss: 311.027222 [17920/99840], accuracy 91.23% [16349/17920] training loss: 312.993866 [20480/99840], accuracy 91.18% [18674/20480] training loss: 308.017395 [23040/99840], accuracy 91.10% [20990/23040] training loss: 305.231506 [25600/99840], accuracy 91.12% [23328/25600] training loss: 310.960266 [28160/99840], accuracy 91.17% [25673/28160] training loss: 309.835571 [30720/99840], accuracy 91.14% [27998/30720] training loss: 306.506012 [33280/99840], accuracy 91.20% [30351/33280] training loss: 311.590820 [35840/99840], accuracy 91.25% [32705/35840] training loss: 307.833374 [38400/99840], accuracy 91.22% [35029/38400] training loss: 310.998108 [40960/99840], accuracy 91.18% [37346/40960] training loss: 311.392822 [43520/99840], accuracy 91.16% [39674/43520] training loss: 313.557251 [46080/99840], accuracy 91.12% [41990/46080] training loss: 312.230164 [48640/99840], accuracy 91.17% [44346/48640] training loss: 310.557465 [51200/99840], accuracy 91.20% [46693/51200] training loss: 309.920685 [53760/99840], accuracy 91.18% [49018/53760] training loss: 307.903198 [56320/99840], accuracy 91.20% [51365/56320] training loss: 313.295593 [58880/99840], accuracy 91.18% [53686/58880] training loss: 308.900726 [61440/99840], accuracy 91.18% [56022/61440] training loss: 307.623444 [64000/99840], accuracy 91.21% [58375/64000] training loss: 311.190186 [66560/99840], accuracy 91.22% [60716/66560] training loss: 309.296600 [69120/99840], accuracy 91.25% [63073/69120] training loss: 308.161407 [71680/99840], accuracy 91.24% [65398/71680] training loss: 310.644287 [74240/99840], accuracy 91.26% [67752/74240] training loss: 304.907898 [76800/99840], accuracy 91.25% [70082/76800] training loss: 313.031311 [79360/99840], accuracy 91.24% [72410/79360] training loss: 311.413635 [81920/99840], accuracy 91.25% [74751/81920] training loss: 306.941040 [84480/99840], accuracy 91.22% [77062/84480] training loss: 314.478394 [87040/99840], accuracy 91.21% [79385/87040] training loss: 315.682556 [89600/99840], accuracy 91.19% [81707/89600] training loss: 316.148682 [92160/99840], accuracy 91.19% [84038/92160] training loss: 308.195679 [94720/99840], accuracy 91.21% [86391/94720] training loss: 310.653229 [97280/99840], accuracy 91.20% [88722/97280] training loss: 306.947754 [99840/99840], accuracy 91.22% [91072/99840] training avg loss: 2.417863 [99840/99840] training accuracy: 91.22% [91072/99840] validation avg loss: 2.423693 validation accuracy: 90.23% [22522/24960] saving model Epoch 16 training loss: 310.687592 [ 2560/99840], accuracy 92.46% [ 2367/ 2560] training loss: 307.311951 [ 5120/99840], accuracy 92.19% [ 4720/ 5120] training loss: 306.475952 [ 7680/99840], accuracy 91.73% [ 7045/ 7680] training loss: 308.140625 [10240/99840], accuracy 91.70% [ 9390/10240] training loss: 311.939911 [12800/99840], accuracy 91.69% [11736/12800] training loss: 309.078247 [15360/99840], accuracy 91.70% [14085/15360] training loss: 313.170471 [17920/99840], accuracy 91.63% [16420/17920] training loss: 310.050079 [20480/99840], accuracy 91.60% [18759/20480] training loss: 309.060089 [23040/99840], accuracy 91.45% [21070/23040] training loss: 302.405304 [25600/99840], accuracy 91.53% [23431/25600] training loss: 314.591156 [28160/99840], accuracy 91.45% [25751/28160] training loss: 312.786926 [30720/99840], accuracy 91.48% [28103/30720] training loss: 313.564453 [33280/99840], accuracy 91.45% [30435/33280] training loss: 305.218262 [35840/99840], accuracy 91.44% [32773/35840] training loss: 310.315582 [38400/99840], accuracy 91.42% [35106/38400] training loss: 311.607605 [40960/99840], accuracy 91.39% [37433/40960] training loss: 306.495850 [43520/99840], accuracy 91.33% [39745/43520] training loss: 307.033386 [46080/99840], accuracy 91.39% [42113/46080] training loss: 308.742737 [48640/99840], accuracy 91.38% [44446/48640] training loss: 308.896240 [51200/99840], accuracy 91.38% [46787/51200] training loss: 309.330292 [53760/99840], accuracy 91.36% [49115/53760] training loss: 307.106720 [56320/99840], accuracy 91.32% [51433/56320] training loss: 310.985352 [58880/99840], accuracy 91.34% [53781/58880] training loss: 309.797119 [61440/99840], accuracy 91.37% [56136/61440] training loss: 307.450378 [64000/99840], accuracy 91.42% [58507/64000] training loss: 307.041992 [66560/99840], accuracy 91.41% [60841/66560] training loss: 305.835876 [69120/99840], accuracy 91.40% [63179/69120] training loss: 310.912598 [71680/99840], accuracy 91.39% [65510/71680] training loss: 306.097107 [74240/99840], accuracy 91.41% [67861/74240] training loss: 304.349457 [76800/99840], accuracy 91.40% [70198/76800] training loss: 309.620209 [79360/99840], accuracy 91.39% [72530/79360] training loss: 311.192535 [81920/99840], accuracy 91.39% [74863/81920] training loss: 319.593231 [84480/99840], accuracy 91.36% [77180/84480] training loss: 306.188416 [87040/99840], accuracy 91.37% [79532/87040] training loss: 303.983856 [89600/99840], accuracy 91.38% [81876/89600] training loss: 303.862274 [92160/99840], accuracy 91.40% [84232/92160] training loss: 307.910645 [94720/99840], accuracy 91.41% [86583/94720] training loss: 305.902802 [97280/99840], accuracy 91.42% [88937/97280] training loss: 315.972351 [99840/99840], accuracy 91.40% [91253/99840] training avg loss: 2.414988 [99840/99840] training accuracy: 91.40% [91253/99840] validation avg loss: 2.421625 validation accuracy: 90.49% [22586/24960] saving model Epoch 17 training loss: 311.944061 [ 2560/99840], accuracy 91.64% [ 2346/ 2560] training loss: 309.156738 [ 5120/99840], accuracy 91.39% [ 4679/ 5120] training loss: 307.592438 [ 7680/99840], accuracy 91.64% [ 7038/ 7680] training loss: 310.467621 [10240/99840], accuracy 91.67% [ 9387/10240] training loss: 305.895081 [12800/99840], accuracy 91.52% [11714/12800] training loss: 311.497559 [15360/99840], accuracy 91.44% [14045/15360] training loss: 304.991913 [17920/99840], accuracy 91.43% [16384/17920] training loss: 306.708649 [20480/99840], accuracy 91.46% [18730/20480] training loss: 306.778564 [23040/99840], accuracy 91.54% [21090/23040] training loss: 306.906433 [25600/99840], accuracy 91.46% [23414/25600] training loss: 312.599152 [28160/99840], accuracy 91.46% [25755/28160] training loss: 307.636566 [30720/99840], accuracy 91.46% [28095/30720] training loss: 307.458374 [33280/99840], accuracy 91.47% [30441/33280] training loss: 311.594055 [35840/99840], accuracy 91.50% [32793/35840] training loss: 311.406891 [38400/99840], accuracy 91.51% [35139/38400] training loss: 308.006561 [40960/99840], accuracy 91.51% [37483/40960] training loss: 313.130096 [43520/99840], accuracy 91.51% [39827/43520] training loss: 314.015594 [46080/99840], accuracy 91.51% [42170/46080] training loss: 311.998871 [48640/99840], accuracy 91.53% [44522/48640] training loss: 309.819275 [51200/99840], accuracy 91.56% [46881/51200] training loss: 311.149780 [53760/99840], accuracy 91.58% [49235/53760] training loss: 310.477905 [56320/99840], accuracy 91.59% [51586/56320] training loss: 307.296051 [58880/99840], accuracy 91.62% [53945/58880] training loss: 309.882507 [61440/99840], accuracy 91.59% [56272/61440] training loss: 312.448853 [64000/99840], accuracy 91.57% [58602/64000] training loss: 308.870636 [66560/99840], accuracy 91.59% [60960/66560] training loss: 309.588989 [69120/99840], accuracy 91.59% [63308/69120] training loss: 309.339905 [71680/99840], accuracy 91.61% [65664/71680] training loss: 308.962402 [74240/99840], accuracy 91.59% [67999/74240] training loss: 303.436340 [76800/99840], accuracy 91.59% [70342/76800] training loss: 309.336975 [79360/99840], accuracy 91.56% [72664/79360] training loss: 309.588928 [81920/99840], accuracy 91.57% [75012/81920] training loss: 307.852448 [84480/99840], accuracy 91.56% [77352/84480] training loss: 306.639526 [87040/99840], accuracy 91.59% [79721/87040] training loss: 310.359985 [89600/99840], accuracy 91.61% [82086/89600] training loss: 301.850464 [92160/99840], accuracy 91.61% [84431/92160] training loss: 310.355530 [94720/99840], accuracy 91.62% [86779/94720] training loss: 304.506287 [97280/99840], accuracy 91.62% [89125/97280] training loss: 306.223114 [99840/99840], accuracy 91.60% [91456/99840] training avg loss: 2.412560 [99840/99840] training accuracy: 91.60% [91456/99840] validation avg loss: 2.421547 validation accuracy: 90.33% [22546/24960] saving model Epoch 18 training loss: 313.325806 [ 2560/99840], accuracy 91.48% [ 2342/ 2560] training loss: 306.436890 [ 5120/99840], accuracy 91.60% [ 4690/ 5120] training loss: 309.002380 [ 7680/99840], accuracy 91.99% [ 7065/ 7680] training loss: 311.488892 [10240/99840], accuracy 92.01% [ 9422/10240] training loss: 312.286163 [12800/99840], accuracy 91.98% [11774/12800] training loss: 311.334778 [15360/99840], accuracy 91.88% [14113/15360] training loss: 306.232758 [17920/99840], accuracy 91.89% [16466/17920] training loss: 311.261963 [20480/99840], accuracy 91.88% [18818/20480] training loss: 309.614990 [23040/99840], accuracy 91.82% [21156/23040] training loss: 305.563324 [25600/99840], accuracy 91.73% [23483/25600] training loss: 309.813202 [28160/99840], accuracy 91.66% [25812/28160] training loss: 305.735840 [30720/99840], accuracy 91.65% [28156/30720] training loss: 306.901947 [33280/99840], accuracy 91.66% [30506/33280] training loss: 311.771515 [35840/99840], accuracy 91.70% [32866/35840] training loss: 310.692688 [38400/99840], accuracy 91.72% [35219/38400] training loss: 315.129120 [40960/99840], accuracy 91.72% [37567/40960] training loss: 314.301178 [43520/99840], accuracy 91.71% [39911/43520] training loss: 306.257080 [46080/99840], accuracy 91.71% [42260/46080] training loss: 311.698029 [48640/99840], accuracy 91.76% [44630/48640] training loss: 305.495728 [51200/99840], accuracy 91.77% [46988/51200] training loss: 309.093170 [53760/99840], accuracy 91.78% [49343/53760] training loss: 308.939056 [56320/99840], accuracy 91.81% [51706/56320] training loss: 308.524353 [58880/99840], accuracy 91.82% [54063/58880] training loss: 306.165344 [61440/99840], accuracy 91.82% [56415/61440] training loss: 314.952148 [64000/99840], accuracy 91.81% [58759/64000] training loss: 304.037842 [66560/99840], accuracy 91.82% [61113/66560] training loss: 308.028931 [69120/99840], accuracy 91.82% [63467/69120] training loss: 303.952759 [71680/99840], accuracy 91.80% [65804/71680] training loss: 314.496826 [74240/99840], accuracy 91.77% [68133/74240] training loss: 307.271973 [76800/99840], accuracy 91.77% [70476/76800] training loss: 310.484131 [79360/99840], accuracy 91.75% [72816/79360] training loss: 308.135254 [81920/99840], accuracy 91.76% [75166/81920] training loss: 310.138214 [84480/99840], accuracy 91.75% [77508/84480] training loss: 310.955170 [87040/99840], accuracy 91.73% [79842/87040] training loss: 307.461609 [89600/99840], accuracy 91.73% [82189/89600] training loss: 308.984985 [92160/99840], accuracy 91.73% [84537/92160] training loss: 314.200256 [94720/99840], accuracy 91.72% [86877/94720] training loss: 299.844666 [97280/99840], accuracy 91.74% [89240/97280] training loss: 306.187469 [99840/99840], accuracy 91.75% [91607/99840] training avg loss: 2.410906 [99840/99840] training accuracy: 91.75% [91607/99840] validation avg loss: 2.421454 validation accuracy: 90.41% [22566/24960] saving model Epoch 19 training loss: 304.000458 [ 2560/99840], accuracy 92.30% [ 2363/ 2560] training loss: 306.944580 [ 5120/99840], accuracy 92.19% [ 4720/ 5120] training loss: 304.595917 [ 7680/99840], accuracy 92.01% [ 7066/ 7680] training loss: 314.830902 [10240/99840], accuracy 91.90% [ 9411/10240] training loss: 310.640839 [12800/99840], accuracy 91.99% [11775/12800] training loss: 305.698730 [15360/99840], accuracy 92.15% [14154/15360] training loss: 312.327850 [17920/99840], accuracy 92.11% [16507/17920] training loss: 310.882050 [20480/99840], accuracy 92.11% [18864/20480] training loss: 307.697113 [23040/99840], accuracy 92.12% [21225/23040] training loss: 307.192566 [25600/99840], accuracy 92.13% [23585/25600] training loss: 317.047455 [28160/99840], accuracy 92.06% [25924/28160] training loss: 308.906616 [30720/99840], accuracy 92.03% [28272/30720] training loss: 308.235840 [33280/99840], accuracy 91.97% [30609/33280] training loss: 304.979401 [35840/99840], accuracy 91.98% [32967/35840] training loss: 307.262268 [38400/99840], accuracy 91.97% [35315/38400] training loss: 306.308777 [40960/99840], accuracy 92.00% [37684/40960] training loss: 307.067871 [43520/99840], accuracy 92.01% [40042/43520] training loss: 306.559937 [46080/99840], accuracy 91.97% [42378/46080] training loss: 310.520752 [48640/99840], accuracy 91.92% [44712/48640] training loss: 308.070099 [51200/99840], accuracy 91.94% [47074/51200] training loss: 305.524048 [53760/99840], accuracy 91.95% [49432/53760] training loss: 311.269867 [56320/99840], accuracy 91.94% [51782/56320] training loss: 302.006226 [58880/99840], accuracy 91.95% [54139/58880] training loss: 311.487213 [61440/99840], accuracy 91.94% [56487/61440] training loss: 307.267975 [64000/99840], accuracy 91.95% [58846/64000] training loss: 316.126129 [66560/99840], accuracy 91.93% [61190/66560] training loss: 311.848145 [69120/99840], accuracy 91.91% [63525/69120] training loss: 313.549500 [71680/99840], accuracy 91.88% [65862/71680] training loss: 308.388306 [74240/99840], accuracy 91.87% [68206/74240] training loss: 309.890381 [76800/99840], accuracy 91.87% [70559/76800] training loss: 303.936951 [79360/99840], accuracy 91.85% [72894/79360] training loss: 308.601929 [81920/99840], accuracy 91.84% [75239/81920] training loss: 308.610870 [84480/99840], accuracy 91.84% [77590/84480] training loss: 306.202332 [87040/99840], accuracy 91.86% [79959/87040] training loss: 315.423126 [89600/99840], accuracy 91.87% [82316/89600] training loss: 310.021667 [92160/99840], accuracy 91.88% [84675/92160] training loss: 306.682831 [94720/99840], accuracy 91.90% [87049/94720] training loss: 306.990509 [97280/99840], accuracy 91.91% [89408/97280] training loss: 311.179932 [99840/99840], accuracy 91.89% [91742/99840] training avg loss: 2.409338 [99840/99840] training accuracy: 91.89% [91742/99840] validation avg loss: 2.419433 validation accuracy: 90.53% [22597/24960] saving model Epoch 20 training loss: 311.489319 [ 2560/99840], accuracy 92.19% [ 2360/ 2560] training loss: 306.598663 [ 5120/99840], accuracy 92.34% [ 4728/ 5120] training loss: 308.394348 [ 7680/99840], accuracy 92.08% [ 7072/ 7680] training loss: 309.047760 [10240/99840], accuracy 92.10% [ 9431/10240] training loss: 313.071777 [12800/99840], accuracy 92.01% [11777/12800] training loss: 309.990021 [15360/99840], accuracy 91.89% [14114/15360] training loss: 305.164886 [17920/99840], accuracy 91.82% [16454/17920] training loss: 307.533508 [20480/99840], accuracy 91.88% [18818/20480] training loss: 307.396210 [23040/99840], accuracy 91.96% [21188/23040] training loss: 311.678650 [25600/99840], accuracy 91.94% [23536/25600] training loss: 310.389160 [28160/99840], accuracy 91.93% [25888/28160] training loss: 305.950684 [30720/99840], accuracy 92.01% [28266/30720] training loss: 312.084381 [33280/99840], accuracy 92.04% [30630/33280] training loss: 306.775024 [35840/99840], accuracy 91.99% [32970/35840] training loss: 304.740662 [38400/99840], accuracy 91.98% [35320/38400] training loss: 302.291016 [40960/99840], accuracy 92.06% [37708/40960] training loss: 310.180603 [43520/99840], accuracy 92.06% [40065/43520] training loss: 306.966248 [46080/99840], accuracy 92.07% [42428/46080] training loss: 307.579437 [48640/99840], accuracy 92.11% [44803/48640] training loss: 306.812958 [51200/99840], accuracy 92.06% [47136/51200] training loss: 306.109009 [53760/99840], accuracy 92.05% [49487/53760] training loss: 306.297241 [56320/99840], accuracy 92.03% [51829/56320] training loss: 308.035645 [58880/99840], accuracy 92.06% [54202/58880] training loss: 307.934418 [61440/99840], accuracy 92.08% [56571/61440] training loss: 305.626282 [64000/99840], accuracy 92.01% [58886/64000] training loss: 308.585297 [66560/99840], accuracy 92.02% [61246/66560] training loss: 313.032166 [69120/99840], accuracy 92.00% [63593/69120] training loss: 311.037933 [71680/99840], accuracy 92.00% [65943/71680] training loss: 312.306183 [74240/99840], accuracy 92.02% [68315/74240] training loss: 305.226044 [76800/99840], accuracy 91.99% [70651/76800] training loss: 318.681854 [79360/99840], accuracy 91.97% [72988/79360] training loss: 306.480804 [81920/99840], accuracy 91.98% [75352/81920] training loss: 305.515381 [84480/99840], accuracy 91.98% [77703/84480] training loss: 310.729218 [87040/99840], accuracy 92.00% [80074/87040] training loss: 308.231293 [89600/99840], accuracy 92.00% [82436/89600] training loss: 309.109955 [92160/99840], accuracy 91.99% [84775/92160] training loss: 306.946899 [94720/99840], accuracy 92.01% [87153/94720] training loss: 304.009552 [97280/99840], accuracy 92.01% [89505/97280] training loss: 305.657776 [99840/99840], accuracy 92.01% [91858/99840] training avg loss: 2.407991 [99840/99840] training accuracy: 92.01% [91858/99840] validation avg loss: 2.421627 validation accuracy: 90.42% [22569/24960] saving model Epoch 21 training loss: 314.231110 [ 2560/99840], accuracy 91.95% [ 2354/ 2560] training loss: 307.006042 [ 5120/99840], accuracy 92.07% [ 4714/ 5120] training loss: 310.757690 [ 7680/99840], accuracy 92.04% [ 7069/ 7680] training loss: 306.907440 [10240/99840], accuracy 92.10% [ 9431/10240] training loss: 305.658936 [12800/99840], accuracy 92.22% [11804/12800] training loss: 307.246552 [15360/99840], accuracy 92.29% [14176/15360] training loss: 309.744873 [17920/99840], accuracy 92.21% [16524/17920] training loss: 308.829193 [20480/99840], accuracy 92.13% [18869/20480] training loss: 313.664764 [23040/99840], accuracy 92.15% [21232/23040] training loss: 305.520752 [25600/99840], accuracy 92.14% [23589/25600] training loss: 310.031494 [28160/99840], accuracy 92.19% [25960/28160] training loss: 306.135284 [30720/99840], accuracy 92.26% [28341/30720] training loss: 309.320892 [33280/99840], accuracy 92.29% [30713/33280] training loss: 312.895081 [35840/99840], accuracy 92.26% [33067/35840] training loss: 309.616699 [38400/99840], accuracy 92.23% [35418/38400] training loss: 306.175140 [40960/99840], accuracy 92.24% [37780/40960] training loss: 304.699829 [43520/99840], accuracy 92.26% [40153/43520] training loss: 307.955383 [46080/99840], accuracy 92.25% [42510/46080] training loss: 306.507812 [48640/99840], accuracy 92.24% [44864/48640] training loss: 310.548157 [51200/99840], accuracy 92.21% [47211/51200] training loss: 311.575531 [53760/99840], accuracy 92.18% [49557/53760] training loss: 307.174011 [56320/99840], accuracy 92.19% [51922/56320] training loss: 308.782013 [58880/99840], accuracy 92.18% [54274/58880] training loss: 307.861053 [61440/99840], accuracy 92.18% [56635/61440] training loss: 312.642944 [64000/99840], accuracy 92.15% [58973/64000] training loss: 307.002014 [66560/99840], accuracy 92.16% [61345/66560] training loss: 305.592194 [69120/99840], accuracy 92.15% [63697/69120] training loss: 307.530151 [71680/99840], accuracy 92.16% [66059/71680] training loss: 306.630768 [74240/99840], accuracy 92.16% [68420/74240] training loss: 312.355804 [76800/99840], accuracy 92.15% [70771/76800] training loss: 319.072723 [79360/99840], accuracy 92.13% [73114/79360] training loss: 308.243347 [81920/99840], accuracy 92.13% [75470/81920] training loss: 307.515656 [84480/99840], accuracy 92.14% [77840/84480] training loss: 306.053497 [87040/99840], accuracy 92.14% [80195/87040] training loss: 308.718933 [89600/99840], accuracy 92.14% [82559/89600] training loss: 310.395599 [92160/99840], accuracy 92.14% [84916/92160] training loss: 308.015259 [94720/99840], accuracy 92.14% [87273/94720] training loss: 310.624908 [97280/99840], accuracy 92.12% [89617/97280] training loss: 305.400421 [99840/99840], accuracy 92.13% [91985/99840] training avg loss: 2.406658 [99840/99840] training accuracy: 92.13% [91985/99840] validation avg loss: 2.418439 validation accuracy: 90.65% [22626/24960] saving model Epoch 22 training loss: 308.159882 [ 2560/99840], accuracy 92.30% [ 2363/ 2560] training loss: 303.234711 [ 5120/99840], accuracy 92.79% [ 4751/ 5120] training loss: 301.684143 [ 7680/99840], accuracy 92.57% [ 7109/ 7680] training loss: 309.760651 [10240/99840], accuracy 92.57% [ 9479/10240] training loss: 312.061310 [12800/99840], accuracy 92.52% [11842/12800] training loss: 308.188049 [15360/99840], accuracy 92.54% [14214/15360] training loss: 311.414246 [17920/99840], accuracy 92.41% [16560/17920] training loss: 303.889587 [20480/99840], accuracy 92.39% [18921/20480] training loss: 304.508118 [23040/99840], accuracy 92.49% [21310/23040] training loss: 307.923920 [25600/99840], accuracy 92.46% [23671/25600] training loss: 308.276733 [28160/99840], accuracy 92.40% [26020/28160] training loss: 306.870178 [30720/99840], accuracy 92.41% [28389/30720] training loss: 310.421387 [33280/99840], accuracy 92.43% [30761/33280] training loss: 305.917786 [35840/99840], accuracy 92.40% [33117/35840] training loss: 308.875183 [38400/99840], accuracy 92.38% [35475/38400] training loss: 308.684662 [40960/99840], accuracy 92.35% [37827/40960] training loss: 307.260956 [43520/99840], accuracy 92.39% [40209/43520] training loss: 305.185852 [46080/99840], accuracy 92.41% [42581/46080] training loss: 311.041229 [48640/99840], accuracy 92.42% [44952/48640] training loss: 311.304138 [51200/99840], accuracy 92.38% [47300/51200] training loss: 307.868866 [53760/99840], accuracy 92.41% [49680/53760] training loss: 304.114197 [56320/99840], accuracy 92.41% [52044/56320] training loss: 307.259491 [58880/99840], accuracy 92.38% [54392/58880] training loss: 308.648651 [61440/99840], accuracy 92.35% [56742/61440] training loss: 307.387451 [64000/99840], accuracy 92.36% [59108/64000] training loss: 305.433472 [66560/99840], accuracy 92.33% [61456/66560] training loss: 307.106201 [69120/99840], accuracy 92.30% [63800/69120] training loss: 305.006714 [71680/99840], accuracy 92.32% [66173/71680] training loss: 301.711487 [74240/99840], accuracy 92.33% [68544/74240] training loss: 314.000092 [76800/99840], accuracy 92.31% [70895/76800] training loss: 305.244019 [79360/99840], accuracy 92.30% [73249/79360] training loss: 305.470795 [81920/99840], accuracy 92.33% [75637/81920] training loss: 305.990662 [84480/99840], accuracy 92.30% [77979/84480] training loss: 307.944336 [87040/99840], accuracy 92.29% [80325/87040] training loss: 305.440613 [89600/99840], accuracy 92.29% [82691/89600] training loss: 309.351135 [92160/99840], accuracy 92.32% [85079/92160] training loss: 306.920074 [94720/99840], accuracy 92.31% [87439/94720] training loss: 306.352203 [97280/99840], accuracy 92.32% [89805/97280] training loss: 307.670715 [99840/99840], accuracy 92.31% [92161/99840] training avg loss: 2.404530 [99840/99840] training accuracy: 92.31% [92161/99840] validation avg loss: 2.418130 validation accuracy: 90.62% [22620/24960] saving model Epoch 23 training loss: 313.117065 [ 2560/99840], accuracy 92.03% [ 2356/ 2560] training loss: 305.500427 [ 5120/99840], accuracy 92.01% [ 4711/ 5120] training loss: 307.371582 [ 7680/99840], accuracy 92.11% [ 7074/ 7680] training loss: 305.503143 [10240/99840], accuracy 92.44% [ 9466/10240] training loss: 309.363831 [12800/99840], accuracy 92.34% [11820/12800] training loss: 307.395142 [15360/99840], accuracy 92.14% [14152/15360] training loss: 303.356995 [17920/99840], accuracy 92.18% [16519/17920] training loss: 306.893158 [20480/99840], accuracy 92.26% [18894/20480] training loss: 305.645996 [23040/99840], accuracy 92.34% [21275/23040] training loss: 306.765045 [25600/99840], accuracy 92.34% [23640/25600] training loss: 310.463531 [28160/99840], accuracy 92.30% [25992/28160] training loss: 308.398773 [30720/99840], accuracy 92.34% [28368/30720] training loss: 305.994232 [33280/99840], accuracy 92.32% [30725/33280] training loss: 308.721313 [35840/99840], accuracy 92.34% [33094/35840] training loss: 313.286987 [38400/99840], accuracy 92.37% [35471/38400] training loss: 308.645416 [40960/99840], accuracy 92.40% [37847/40960] training loss: 313.050659 [43520/99840], accuracy 92.41% [40218/43520] training loss: 307.096100 [46080/99840], accuracy 92.40% [42580/46080] training loss: 304.804199 [48640/99840], accuracy 92.42% [44953/48640] training loss: 311.099579 [51200/99840], accuracy 92.38% [47300/51200] training loss: 308.231506 [53760/99840], accuracy 92.41% [49682/53760] training loss: 305.606812 [56320/99840], accuracy 92.43% [52057/56320] training loss: 307.475159 [58880/99840], accuracy 92.46% [54442/58880] training loss: 308.513367 [61440/99840], accuracy 92.45% [56801/61440] training loss: 310.357300 [64000/99840], accuracy 92.44% [59163/64000] training loss: 313.248077 [66560/99840], accuracy 92.42% [61517/66560] training loss: 305.525421 [69120/99840], accuracy 92.46% [63910/69120] training loss: 310.199890 [71680/99840], accuracy 92.45% [66270/71680] training loss: 306.708008 [74240/99840], accuracy 92.45% [68635/74240] training loss: 302.853912 [76800/99840], accuracy 92.44% [70992/76800] training loss: 306.694336 [79360/99840], accuracy 92.44% [73364/79360] training loss: 301.192261 [81920/99840], accuracy 92.47% [75755/81920] training loss: 308.862030 [84480/99840], accuracy 92.48% [78127/84480] training loss: 305.521606 [87040/99840], accuracy 92.47% [80486/87040] training loss: 310.433716 [89600/99840], accuracy 92.50% [82876/89600] training loss: 307.620056 [92160/99840], accuracy 92.48% [85233/92160] training loss: 306.701385 [94720/99840], accuracy 92.48% [87596/94720] training loss: 308.317810 [97280/99840], accuracy 92.48% [89962/97280] training loss: 313.034546 [99840/99840], accuracy 92.48% [92332/99840] training avg loss: 2.402632 [99840/99840] training accuracy: 92.48% [92332/99840] validation avg loss: 2.417358 validation accuracy: 90.69% [22637/24960] saving model Epoch 24 training loss: 311.935760 [ 2560/99840], accuracy 91.72% [ 2348/ 2560] training loss: 305.840485 [ 5120/99840], accuracy 91.52% [ 4686/ 5120] training loss: 306.604187 [ 7680/99840], accuracy 91.97% [ 7063/ 7680] training loss: 305.786896 [10240/99840], accuracy 92.10% [ 9431/10240] training loss: 311.326111 [12800/99840], accuracy 92.14% [11794/12800] training loss: 302.550507 [15360/99840], accuracy 92.17% [14157/15360] training loss: 307.493134 [17920/99840], accuracy 92.25% [16532/17920] training loss: 306.960999 [20480/99840], accuracy 92.29% [18902/20480] training loss: 307.894012 [23040/99840], accuracy 92.44% [21299/23040] training loss: 308.404480 [25600/99840], accuracy 92.40% [23654/25600] training loss: 305.485992 [28160/99840], accuracy 92.38% [26013/28160] training loss: 305.645111 [30720/99840], accuracy 92.46% [28404/30720] training loss: 311.086975 [33280/99840], accuracy 92.51% [30788/33280] training loss: 304.892517 [35840/99840], accuracy 92.61% [33190/35840] training loss: 307.903320 [38400/99840], accuracy 92.60% [35559/38400] training loss: 307.495422 [40960/99840], accuracy 92.60% [37929/40960] training loss: 309.533234 [43520/99840], accuracy 92.56% [40282/43520] training loss: 311.230011 [46080/99840], accuracy 92.52% [42634/46080] training loss: 306.289948 [48640/99840], accuracy 92.52% [45003/48640] training loss: 310.874817 [51200/99840], accuracy 92.53% [47377/51200] training loss: 304.471588 [53760/99840], accuracy 92.58% [49772/53760] training loss: 308.479248 [56320/99840], accuracy 92.62% [52165/56320] training loss: 303.620422 [58880/99840], accuracy 92.62% [54537/58880] training loss: 308.895508 [61440/99840], accuracy 92.65% [56926/61440] training loss: 308.341583 [64000/99840], accuracy 92.61% [59273/64000] training loss: 304.583038 [66560/99840], accuracy 92.65% [61667/66560] training loss: 306.982666 [69120/99840], accuracy 92.65% [64042/69120] training loss: 306.258545 [71680/99840], accuracy 92.60% [66376/71680] training loss: 307.604248 [74240/99840], accuracy 92.57% [68723/74240] training loss: 306.592773 [76800/99840], accuracy 92.55% [71082/76800] training loss: 306.822784 [79360/99840], accuracy 92.54% [73436/79360] training loss: 308.915192 [81920/99840], accuracy 92.53% [75801/81920] training loss: 306.708191 [84480/99840], accuracy 92.54% [78182/84480] training loss: 309.757874 [87040/99840], accuracy 92.55% [80556/87040] training loss: 306.454773 [89600/99840], accuracy 92.55% [82922/89600] training loss: 309.625336 [92160/99840], accuracy 92.55% [85291/92160] training loss: 305.602997 [94720/99840], accuracy 92.54% [87653/94720] training loss: 310.442413 [97280/99840], accuracy 92.51% [89993/97280] training loss: 308.771271 [99840/99840], accuracy 92.51% [92364/99840] training avg loss: 2.402084 [99840/99840] training accuracy: 92.51% [92364/99840] validation avg loss: 2.416771 validation accuracy: 90.85% [22675/24960] saving model Epoch 25 training loss: 308.667297 [ 2560/99840], accuracy 91.37% [ 2339/ 2560] training loss: 306.275269 [ 5120/99840], accuracy 92.19% [ 4720/ 5120] training loss: 305.467621 [ 7680/99840], accuracy 92.27% [ 7086/ 7680] training loss: 305.752319 [10240/99840], accuracy 92.29% [ 9451/10240] training loss: 306.680084 [12800/99840], accuracy 92.28% [11812/12800] training loss: 306.488220 [15360/99840], accuracy 92.42% [14196/15360] training loss: 306.578857 [17920/99840], accuracy 92.47% [16570/17920] training loss: 308.893250 [20480/99840], accuracy 92.55% [18955/20480] training loss: 307.929260 [23040/99840], accuracy 92.57% [21328/23040] training loss: 304.485229 [25600/99840], accuracy 92.57% [23697/25600] training loss: 305.515381 [28160/99840], accuracy 92.52% [26055/28160] training loss: 306.804779 [30720/99840], accuracy 92.60% [28447/30720] training loss: 303.844971 [33280/99840], accuracy 92.65% [30835/33280] training loss: 307.514893 [35840/99840], accuracy 92.62% [33194/35840] training loss: 307.897186 [38400/99840], accuracy 92.62% [35565/38400] training loss: 312.933044 [40960/99840], accuracy 92.60% [37927/40960] training loss: 304.796417 [43520/99840], accuracy 92.59% [40297/43520] training loss: 301.950073 [46080/99840], accuracy 92.59% [42665/46080] training loss: 302.457886 [48640/99840], accuracy 92.60% [45043/48640] training loss: 306.559998 [51200/99840], accuracy 92.61% [47415/51200] training loss: 304.157379 [53760/99840], accuracy 92.61% [49785/53760] training loss: 303.745636 [56320/99840], accuracy 92.62% [52164/56320] training loss: 309.324066 [58880/99840], accuracy 92.62% [54537/58880] training loss: 305.361847 [61440/99840], accuracy 92.63% [56913/61440] training loss: 311.008789 [64000/99840], accuracy 92.66% [59302/64000] training loss: 305.590698 [66560/99840], accuracy 92.64% [61663/66560] training loss: 303.069916 [69120/99840], accuracy 92.64% [64035/69120] training loss: 304.036407 [71680/99840], accuracy 92.65% [66408/71680] training loss: 310.314209 [74240/99840], accuracy 92.63% [68770/74240] training loss: 307.706604 [76800/99840], accuracy 92.65% [71153/76800] training loss: 306.777924 [79360/99840], accuracy 92.65% [73528/79360] training loss: 310.795349 [81920/99840], accuracy 92.68% [75921/81920] training loss: 309.499939 [84480/99840], accuracy 92.66% [78280/84480] training loss: 307.435364 [87040/99840], accuracy 92.66% [80652/87040] training loss: 304.163208 [89600/99840], accuracy 92.66% [83022/89600] training loss: 303.918243 [92160/99840], accuracy 92.64% [85381/92160] training loss: 311.083160 [94720/99840], accuracy 92.62% [87730/94720] training loss: 312.003204 [97280/99840], accuracy 92.62% [90098/97280] training loss: 307.399353 [99840/99840], accuracy 92.60% [92455/99840] training avg loss: 2.400819 [99840/99840] training accuracy: 92.60% [92455/99840] validation avg loss: 2.417000 validation accuracy: 90.78% [22658/24960] saving model Epoch 26 training loss: 304.593506 [ 2560/99840], accuracy 93.36% [ 2390/ 2560] training loss: 302.927734 [ 5120/99840], accuracy 92.87% [ 4755/ 5120] training loss: 307.517639 [ 7680/99840], accuracy 92.89% [ 7134/ 7680] training loss: 304.760498 [10240/99840], accuracy 93.08% [ 9531/10240] training loss: 307.144623 [12800/99840], accuracy 93.28% [11940/12800] training loss: 308.636078 [15360/99840], accuracy 93.24% [14321/15360] training loss: 307.731750 [17920/99840], accuracy 93.12% [16687/17920] training loss: 307.505096 [20480/99840], accuracy 93.15% [19078/20480] training loss: 307.681580 [23040/99840], accuracy 93.10% [21451/23040] training loss: 305.826141 [25600/99840], accuracy 93.02% [23814/25600] training loss: 310.222473 [28160/99840], accuracy 93.01% [26191/28160] training loss: 305.402008 [30720/99840], accuracy 93.01% [28572/30720] training loss: 307.002167 [33280/99840], accuracy 92.99% [30946/33280] training loss: 304.763794 [35840/99840], accuracy 92.97% [33320/35840] training loss: 309.830414 [38400/99840], accuracy 92.91% [35679/38400] training loss: 303.470001 [40960/99840], accuracy 92.93% [38064/40960] training loss: 303.265686 [43520/99840], accuracy 92.95% [40451/43520] training loss: 307.970917 [46080/99840], accuracy 92.92% [42818/46080] training loss: 310.478485 [48640/99840], accuracy 92.90% [45187/48640] training loss: 311.890656 [51200/99840], accuracy 92.86% [47545/51200] training loss: 304.501953 [53760/99840], accuracy 92.81% [49896/53760] training loss: 300.791321 [56320/99840], accuracy 92.82% [52275/56320] training loss: 307.009644 [58880/99840], accuracy 92.81% [54649/58880] training loss: 309.033966 [61440/99840], accuracy 92.82% [57026/61440] training loss: 305.105469 [64000/99840], accuracy 92.80% [59394/64000] training loss: 312.088898 [66560/99840], accuracy 92.79% [61764/66560] training loss: 309.036224 [69120/99840], accuracy 92.80% [64145/69120] training loss: 310.438202 [71680/99840], accuracy 92.77% [66497/71680] training loss: 310.961548 [74240/99840], accuracy 92.78% [68877/74240] training loss: 307.682068 [76800/99840], accuracy 92.77% [71251/76800] training loss: 307.377228 [79360/99840], accuracy 92.77% [73624/79360] training loss: 308.038666 [81920/99840], accuracy 92.76% [75988/81920] training loss: 309.484833 [84480/99840], accuracy 92.77% [78376/84480] training loss: 305.877075 [87040/99840], accuracy 92.78% [80752/87040] training loss: 306.318176 [89600/99840], accuracy 92.76% [83117/89600] training loss: 307.677948 [92160/99840], accuracy 92.76% [85491/92160] training loss: 304.367462 [94720/99840], accuracy 92.78% [87880/94720] training loss: 305.042450 [97280/99840], accuracy 92.78% [90260/97280] training loss: 307.609406 [99840/99840], accuracy 92.80% [92650/99840] training avg loss: 2.398748 [99840/99840] training accuracy: 92.80% [92650/99840] validation avg loss: 2.417396 validation accuracy: 90.71% [22642/24960] saving model Epoch 27 training loss: 308.942474 [ 2560/99840], accuracy 93.36% [ 2390/ 2560] training loss: 305.842590 [ 5120/99840], accuracy 92.99% [ 4761/ 5120] training loss: 308.493103 [ 7680/99840], accuracy 92.88% [ 7133/ 7680] training loss: 312.214417 [10240/99840], accuracy 92.89% [ 9512/10240] training loss: 312.172150 [12800/99840], accuracy 92.84% [11883/12800] training loss: 303.057526 [15360/99840], accuracy 92.85% [14261/15360] training loss: 308.682861 [17920/99840], accuracy 92.93% [16653/17920] training loss: 307.428711 [20480/99840], accuracy 92.96% [19038/20480] training loss: 305.822449 [23040/99840], accuracy 92.97% [21421/23040] training loss: 311.134155 [25600/99840], accuracy 92.95% [23796/25600] training loss: 307.139618 [28160/99840], accuracy 93.00% [26189/28160] training loss: 306.900909 [30720/99840], accuracy 92.91% [28541/30720] training loss: 304.777161 [33280/99840], accuracy 92.98% [30945/33280] training loss: 308.242065 [35840/99840], accuracy 92.99% [33328/35840] training loss: 306.720276 [38400/99840], accuracy 92.92% [35683/38400] training loss: 307.198608 [40960/99840], accuracy 92.93% [38065/40960] training loss: 309.857178 [43520/99840], accuracy 92.88% [40420/43520] training loss: 308.268829 [46080/99840], accuracy 92.91% [42811/46080] training loss: 303.975708 [48640/99840], accuracy 92.91% [45192/48640] training loss: 310.300568 [51200/99840], accuracy 92.88% [47555/51200] training loss: 310.384735 [53760/99840], accuracy 92.90% [49941/53760] training loss: 310.874451 [56320/99840], accuracy 92.91% [52327/56320] training loss: 302.560699 [58880/99840], accuracy 92.89% [54694/58880] training loss: 306.273071 [61440/99840], accuracy 92.87% [57059/61440] training loss: 305.160217 [64000/99840], accuracy 92.87% [59436/64000] training loss: 308.725311 [66560/99840], accuracy 92.84% [61796/66560] training loss: 304.532440 [69120/99840], accuracy 92.84% [64171/69120] training loss: 307.608215 [71680/99840], accuracy 92.82% [66534/71680] training loss: 303.733307 [74240/99840], accuracy 92.85% [68929/74240] training loss: 306.638275 [76800/99840], accuracy 92.88% [71335/76800] training loss: 307.795746 [79360/99840], accuracy 92.88% [73710/79360] training loss: 307.018066 [81920/99840], accuracy 92.87% [76076/81920] training loss: 308.518341 [84480/99840], accuracy 92.85% [78442/84480] training loss: 307.442719 [87040/99840], accuracy 92.84% [80811/87040] training loss: 306.159698 [89600/99840], accuracy 92.84% [83186/89600] training loss: 308.404968 [92160/99840], accuracy 92.83% [85554/92160] training loss: 307.702026 [94720/99840], accuracy 92.82% [87923/94720] training loss: 306.730316 [97280/99840], accuracy 92.81% [90284/97280] training loss: 308.295624 [99840/99840], accuracy 92.82% [92667/99840] training avg loss: 2.398750 [99840/99840] training accuracy: 92.82% [92667/99840] validation avg loss: 2.417132 validation accuracy: 90.73% [22646/24960] saving model Epoch 28 training loss: 312.329010 [ 2560/99840], accuracy 93.36% [ 2390/ 2560] training loss: 307.717621 [ 5120/99840], accuracy 92.93% [ 4758/ 5120] training loss: 308.210480 [ 7680/99840], accuracy 92.71% [ 7120/ 7680] training loss: 304.567566 [10240/99840], accuracy 92.70% [ 9492/10240] training loss: 306.906525 [12800/99840], accuracy 92.76% [11873/12800] training loss: 308.154480 [15360/99840], accuracy 92.79% [14253/15360] training loss: 310.354126 [17920/99840], accuracy 92.81% [16632/17920] training loss: 310.861237 [20480/99840], accuracy 92.75% [18995/20480] training loss: 301.245026 [23040/99840], accuracy 92.83% [21389/23040] training loss: 316.022888 [25600/99840], accuracy 92.71% [23733/25600] training loss: 304.246826 [28160/99840], accuracy 92.65% [26089/28160] training loss: 305.946136 [30720/99840], accuracy 92.73% [28487/30720] training loss: 304.971405 [33280/99840], accuracy 92.79% [30880/33280] training loss: 308.456329 [35840/99840], accuracy 92.87% [33283/35840] training loss: 307.170105 [38400/99840], accuracy 92.84% [35650/38400] training loss: 311.226532 [40960/99840], accuracy 92.85% [38033/40960] training loss: 305.773987 [43520/99840], accuracy 92.84% [40402/43520] training loss: 315.187927 [46080/99840], accuracy 92.84% [42779/46080] training loss: 310.527466 [48640/99840], accuracy 92.80% [45139/48640] training loss: 301.891968 [51200/99840], accuracy 92.79% [47511/51200] training loss: 315.748413 [53760/99840], accuracy 92.77% [49873/53760] training loss: 309.121033 [56320/99840], accuracy 92.80% [52267/56320] training loss: 307.522705 [58880/99840], accuracy 92.79% [54634/58880] training loss: 307.828033 [61440/99840], accuracy 92.81% [57021/61440] training loss: 307.974304 [64000/99840], accuracy 92.80% [59389/64000] training loss: 307.020233 [66560/99840], accuracy 92.76% [61744/66560] training loss: 305.973267 [69120/99840], accuracy 92.79% [64137/69120] training loss: 305.452240 [71680/99840], accuracy 92.83% [66539/71680] training loss: 304.454010 [74240/99840], accuracy 92.83% [68920/74240] training loss: 308.674347 [76800/99840], accuracy 92.82% [71289/76800] training loss: 306.494202 [79360/99840], accuracy 92.82% [73665/79360] training loss: 307.998474 [81920/99840], accuracy 92.86% [76069/81920] training loss: 308.155029 [84480/99840], accuracy 92.86% [78448/84480] training loss: 304.447449 [87040/99840], accuracy 92.88% [80841/87040] training loss: 307.801208 [89600/99840], accuracy 92.86% [83202/89600] training loss: 308.030396 [92160/99840], accuracy 92.87% [85592/92160] training loss: 306.802521 [94720/99840], accuracy 92.86% [87960/94720] training loss: 314.154755 [97280/99840], accuracy 92.85% [90322/97280] training loss: 314.336517 [99840/99840], accuracy 92.83% [92679/99840] training avg loss: 2.398089 [99840/99840] training accuracy: 92.83% [92679/99840] validation avg loss: 2.416496 validation accuracy: 90.85% [22677/24960] saving model Epoch 29 training loss: 300.715698 [ 2560/99840], accuracy 93.01% [ 2381/ 2560] training loss: 307.125275 [ 5120/99840], accuracy 93.50% [ 4787/ 5120] training loss: 307.482788 [ 7680/99840], accuracy 93.74% [ 7199/ 7680] training loss: 301.119537 [10240/99840], accuracy 93.50% [ 9574/10240] training loss: 306.718231 [12800/99840], accuracy 93.12% [11919/12800] training loss: 307.917236 [15360/99840], accuracy 93.05% [14293/15360] training loss: 310.506195 [17920/99840], accuracy 92.94% [16654/17920] training loss: 304.932861 [20480/99840], accuracy 92.93% [19032/20480] training loss: 311.362823 [23040/99840], accuracy 92.95% [21415/23040] training loss: 307.699677 [25600/99840], accuracy 92.88% [23777/25600] training loss: 306.776764 [28160/99840], accuracy 92.90% [26161/28160] training loss: 306.215820 [30720/99840], accuracy 92.92% [28545/30720] training loss: 309.263763 [33280/99840], accuracy 92.86% [30905/33280] training loss: 308.823029 [35840/99840], accuracy 92.87% [33286/35840] training loss: 308.403778 [38400/99840], accuracy 92.90% [35673/38400] training loss: 303.990417 [40960/99840], accuracy 92.92% [38060/40960] training loss: 310.122589 [43520/99840], accuracy 92.87% [40419/43520] training loss: 306.120453 [46080/99840], accuracy 92.87% [42793/46080] training loss: 307.816071 [48640/99840], accuracy 92.88% [45177/48640] training loss: 311.039673 [51200/99840], accuracy 92.88% [47556/51200] training loss: 304.958862 [53760/99840], accuracy 92.89% [49937/53760] training loss: 309.796448 [56320/99840], accuracy 92.91% [52328/56320] training loss: 306.751831 [58880/99840], accuracy 92.90% [54701/58880] training loss: 306.724121 [61440/99840], accuracy 92.92% [57093/61440] training loss: 307.742523 [64000/99840], accuracy 92.91% [59462/64000] training loss: 309.228241 [66560/99840], accuracy 92.89% [61826/66560] training loss: 306.285675 [69120/99840], accuracy 92.89% [64203/69120] training loss: 305.952118 [71680/99840], accuracy 92.88% [66576/71680] training loss: 306.305939 [74240/99840], accuracy 92.88% [68957/74240] training loss: 306.340302 [76800/99840], accuracy 92.89% [71343/76800] training loss: 303.556946 [79360/99840], accuracy 92.89% [73718/79360] training loss: 306.656921 [81920/99840], accuracy 92.89% [76099/81920] training loss: 305.605835 [84480/99840], accuracy 92.91% [78493/84480] training loss: 305.415100 [87040/99840], accuracy 92.92% [80878/87040] training loss: 303.482666 [89600/99840], accuracy 92.94% [83271/89600] training loss: 303.991974 [92160/99840], accuracy 92.95% [85663/92160] training loss: 306.741272 [94720/99840], accuracy 92.95% [88039/94720] training loss: 306.017029 [97280/99840], accuracy 92.98% [90447/97280] training loss: 307.743317 [99840/99840], accuracy 92.98% [92832/99840] training avg loss: 2.396647 [99840/99840] training accuracy: 92.98% [92832/99840] validation avg loss: 2.416500 validation accuracy: 90.81% [22666/24960] saving model
**** Running model on the testing dataset **** Test total loss: 50263.87488126755 Test avg loss: 2.416532446214786 Test accuracy: 90.81% [18888/20800]
You can see above that this model ends with ~93% accuracy on the test set and ~91% accuracy on the validation set. From the examples above, it performs decently well on a lot of different examples. The training/validation loss curves are pretty close to aligned. It gets 90% on test accuracy and performs decently well over all the characters. There is likely some room for improvement with the model, but overall it seems to generalize well. You can see below that on the handwritten examples it predicts all characters correctly except for 1 character on each. For example in the "fresh beginning" image below it predicts a 'w' instead of a 'n'. in On the font that looks more like handwriting it correctly predicts 177/183 characters, which is still pretty good performance overall. On the other typed fonts it performs similar to the pretrained model but slightly worse, so not very well. Probably the best way to improve performance on other fonts would be to have typed characters in the dataset. I believe the dataset is mainly handwritten characters so that would definitely improve performance on those. Overall, this model performs similar to the pretrained model, but slightly worse. For example, the pretrained model gets all the handwritten examples correct while this model misses 1 character on each of them.
out = image_transcription(test_images[0], test_labels[0], test_labels_spaces[0], TEST_PATH, test_filenames[0], model)
Actual label: BESURETODRINKYOUROVALTINE Predicted label without spaces: BESURETODRINKYOUROYALTINE Accuracy: (24/25) Actual label: BE SURE TO DRINK YOUR OVALTINE Predicted label with spaces: BE SURE TO DRINK YOUR OYALTINE Accuracy: (29/30)
out = image_transcription(test_images[1], test_labels[1], test_labels_spaces[1], TEST_PATH, test_filenames[1], model)
Actual label: GOUTES Predicted label without spaces: GOUTEG Accuracy: (5/6) Actual label: GO UTES Predicted label with spaces: GO UTEG Accuracy: (6/7)
out = image_transcription(test_images[2], test_labels[2], test_labels_spaces[2], TEST_PATH, test_filenames[2], model)
Actual label: DREAMBIGFORDREAMSIGNITEPOSSIBILITYCHASEYOURPASSIONSWITHUNWAVERINGDETERMINATIONBELIEVEINYOURSELFFORYOUARECAPABLEOFEXTRAORDINARYTHINGSREMEMBERTHATTHEJOURNEYISASIMPORTANTASTHEDESTINATION Predicted label without spaces: DREAMBIGFORDREAMSIGNITEPOSSLBILLTYCHASEYOURPASSIONSWITHUNWAVERINGDETERMINATIONBELIEVEINYOURSELFFORYOUARECAPABLEOFEXTRAORDINARYTHLNGSREMEMBERTHATTHEJOURNEYLSASLMPORTANTASTHEDESTINATLON Accuracy: (177/183) Actual label: DREAM BIG FOR DREAMS IGNITE POSSIBILITY CHASE YOUR PASSIONS WITH UNWAVERING DETERMINATION BELIEVE IN YOURSELF FOR YOU ARE CAPABLE OF EXTRAORDINARY THINGS REMEMBER THAT THE JOURNEY IS AS IMPORTANT AS THE DESTINATION Predicted label with spaces: DREAM BIG FOR DREAMS IGNITE POSSLBILLTY CHASE YOUR PASSIONS WITH UNWAVERING DETERMINATION BELIEVE IN YOURSELF FOR YOU ARE CAPABLE OF EXTRAORDINARY THLNGS REMEMBER THAT THE JOURNEY LS AS LMPORTANT AS THE DESTINATLON Accuracy: (208/214)
out = image_transcription(test_images[3], test_labels[3], test_labels_spaces[3], TEST_PATH, test_filenames[3], model)
Actual label: EVERYMOMENTISAFRESHBEGINNINGANEWSTARTANEWPATH Predicted label without spaces: EVERYMOMENTISAFRESHBEGIWNINGANEWSTARTANEWPATH Accuracy: (44/45) Actual label: EVERY MOMENT IS A FRESH BEGINNING A NEW START A NEW PATH Predicted label with spaces: EVERY MOMENT IS A FRESH BEGIWNING A NEW START A NEW PATH Accuracy: (55/56)
out = image_transcription(test_images[4], test_labels[4], test_labels_spaces[4], TEST_PATH, test_filenames[4], model)
Actual label: LOWCARBOHYDRATEDIETSHAVEBECOMEINCREASINGLYPOPULARSUPPORTERSCLAIMTHEYARENOTABLYMOREEFFECTIVETHANOTHERDIETSFORWEIGHTLOSSANDPROVIDEOTHERHEALTHBENEFITSSUCHASLOWERBLOODPRESSUREANDIMPROVEDCHOLESTEROLLEVELSHOWEVERSOMEDOCTORSBELIEVETHESEDIETSCARRYPOTENTIALLONGTERMHEALTHRISKSAREVIEWOFTHEAVAILABLERESEARCHLITERATUREINDICATESTHATLOWCARBOHYDRATEDIETSAREHIGHLYEFFECTIVEFORSHORTTERMWEIGHTLOSSBUTTHATTHEIRLONGTERMEFFECTIVENESSISNOTSIGNIFICANTLYGREATERTHANOTHERCOMMONDIETPLANSTHEIRLONGTERMEFFECTSONCHOLESTEROLLEVELSANDBLOODPRESSUREAREUNKNOWNRESEARCHLITERATURESUGGESTSSOMEPOTENTIALFORNEGATIVEHEALTHOUTCOMESASSOCIATEDWITHINCREASEDCONSUMPTIONOFSATURATEDFATTHISCONCLUSIONPOINTSTOTHEIMPORTANCEOFFOLLOWINGABALANCEDMODERATEDIETAPPROPRIATEFORTHEINDIVIDUALASWELLASTHENEEDFORFURTHERRESEARCH Predicted label without spaces: LOWCARBOHXDRPBIJTAJBTSHAVBBBCYTOMJFLNCRBASJNGLYPOPUKAKSUPPORFBRSRCLAJMTRHKTYAKBXOJTABKXMORBFFFBCFIVBFHANCJRTFHTFKDJTFPSFORWBJGHPTCJSSAXDPROVLDKOFRHERHBALFHBBNFTLJRSSUTIIJJLCHASLIOMTFKBIJCJONPRBSSUKBANDJMPROVBDCYHOJJBSTBROLJTTBVJFIJSAHOWBVBLTSAOWFBDOTCJTOKSBBBJBVTKUTJFSTJITJDIBFSYCARRTJPOLBNPIALLONGTNBKMHTAIJBHRJSKSARBVITKVLOEPHBAVAJIJABLJKRBYSHBAKCHLIUBRAFUKBJXDLCYATRYBSPHARKOWCARBOHXURAFBDJFIRYTSARJFHJGMIYBFFBCTLVBFORSTIOKFPBRMWTTIJGHKBOSSBLJJTFHAJPHTTLKJIOVRRLGFBRMBEFJFCUIVTRNFSSJSNOIRSLGNLFJCANFKYYJJTGRBAYBKTHANOTHBRJCOMMONULBRFPBAXYSRHBLRLONCRFTYKMTKJJEFPBCTSONTCBIOJJJFSTBROLLIVBLSANUBJTOONPKBSSUREKTABUNKNOWXKBSJFARCHLLLBKAFURESLTGCTETJSHPSLSOMBPOFRBNFLAKFORNBTGAJLVBHBAIJTHOUFCOMBSASYHSOCDLAFBUWJTRHINCRBASEDJROXSUMPULONOKSATLJRAFJFDFAPFHLSCYONCJJUSLONPOJNBSLFOTYHBJMPORFAXCIFOTTFOLJLOVVLNCABALAXCBDMODYKRAIBDLEFAPPROPKJAUBEOKFHTKJNJJLVJDLTJJJABASWJFLBASLPHFINETRDEORFUKFRHBKKJFSLJFARCH Accuracy: (44/765) Actual label: LOW CARBOHYDRATE DIETS HAVE BECOME INCREASINGLY POPULAR SUPPORTERS CLAIM THEY ARE NOTABLY MORE EFFECTIVE THAN OTHER DIETS FOR WEIGHTLOSS AND PROVIDE OTHER HEALTH BENEFITS SUCH AS LOWER BLOOD PRESSURE AND IMPROVED CHOLESTEROL LEVELS HOWEVER SOME DOCTORS BELIEVE THESE DIETS CARRY POTENTIAL LONG TERM HEALTH RISKS ARE VIEW OF THE AVAILABLE RESEARCH LITERATURE INDICATES THAT LOW CARBOHYDRATE DIETS ARE HIGHLY EFFECTIVE FOR SHORT TERM WEIGHTLOSS BUT THAT THEIR LONG TERM EFFECTIVENESS IS NOT SIGNIFICANTLY GREATER THAN OTHER COMMON DIET PLANS THEIR LONG TERM EFFECTS ON CHOLESTEROL LEVELS AND BLOOD PRESSURE ARE UNKNOWN RESEARCH LITERATURE SUGGESTS SOME POTENTIAL FOR NEGATIVE HEALTH OUTCOMES ASSOCIATED WITH INCREASED CONSUMPTION OF SATURATED FAT THIS CONCLUSION POINTS TO THE IMPORTANCE OF FOLLOWING A BALANCED MODERATE DIET APPROPRIATE FOR THE INDIVIDUAL AS WELL AS THE NEED FOR FURTHER RESEARCH Predicted label with spaces: LO W C ARBO HXDR PB I JT A J BTS H AVB BBCYTO M JF LNC RBASJNGLY POPUKAK SUPPORFBRSR CLAJM TRHK TY AKB X OJTABKX M ORB FFFBCFIVB FH AN CJR T FH TFK DJTFPS FOR W BJG HP TCJSS AX D PR OVLDK O FR HER HBALF H BBNFTLJRS SUT I I J J L C H AS LIO M TFK BIJCJO N PRBSSU KB AN D JM PR OVBD CYH OJJBSTBROL J TTBV JFIJSA H O W BVBLT SA OWFB D O TC JTOKS BBBJBV TK UTJFS T JITJ DIBFS YC ARR TJ POLBNPIAL LO NG T NBK M HT AIJBH RJSKS ARB VITK VL OE PHB AVAJIJABLJK RB YSH BAKC H LIUBRAFU KB JX DLCYATRYBS PH AR KO W C ARBO HXURAFB DJFIR Y T S AR JF HJG MIY BFFBCTLVB FOR STIO KF PBR M WTTIJG HK BOSS BLJJTFH AJ PH TTLK JIO V RR L G FBR M BEF JFCUIVTRNFSS JS N OIRSLG NLFJC ANFKY Y J J T G RBAYBK TH AN OTHBR JC O M M O N ULBRF PBAX YS RHBLR LO NC RFTYK M T K J J EFPBCTS O N TCBIOJJJFSTBR OL LIVBLS AN U BJTO O N PKBSSU RE K T A B U NK N O W X KBS JF ARC H LLLBKAFU RE SLTGCTETJ SH PSL SO MB PO FR BNFLAK FO R NB TG AJLVB HBAIJTH OUFC O MBS AS Y H SOCDLAFBU WJTRH INC RBASED JR O XSU MPULO N OK SATLJRAF JF D FAP FHLS CYO NCJJUSLO N P OJNBSL FO TYHB JMPORFAXC IF OTT FOLJLO VV LNC A BALAXCBD M O D YKRAIB DLEF APPR OPKJAUB EO K FH TK JNJJLVJDLT J J J AB AS W JFLB ASL PHFI NE TR D EOR FU KFR HBK K JFSL JF ARC H Accuracy: (88/895)
out = image_transcription(test_images[5], test_labels[5], test_labels_spaces[5], TEST_PATH, test_filenames[5], model)
Actual label: YOUWILLFACEMANYDEFEATSINLIFEBUTNEVERLETYOURSELFBEDEFEATED Predicted label without spaces: XOUWIIIEACBMANXDBEBAPSINIIEBBUFNBVBRIBTXOURSBIEBBDBEBAFBD Accuracy: (29/57) Actual label: YOU WILL FACE MANY DEFEATS IN LIFE BUT NEVER LET YOURSELF BE DEFEATED Predicted label with spaces: XOU WIII EACB MANX DBEBAPS IN IIEB BUF NBVBR IBT XOURSBIE BB DBEBAFBD Accuracy: (41/69)
out = image_transcription(test_images[6], test_labels[6], test_labels_spaces[6], TEST_PATH, test_filenames[6], model)
Actual label: ABSTRACTAUDIOPATTERNRECOGNITIONISANIMPORTANTRESEARCHTOPICINTHEMACHINELEARNINGAREAANDINCLUDESSEVERALTASKSSUCHASAUDIOTAGGINGACOUSTICSCENECLASSIFICATIONANDSOUNDEVENTDETECTIONRECENTLYNEURALNETWORKSHAVEBEENAPPLIEDTOSOLVEAUDIOPATTERNRECOGNITIONPROBLEMSHOWEVERPREVIOUSSYSTEMSFOCUSONSMALLDATASETSWHICHLIMITSTHEPERFORMANCEOFAUDIOPATTERNRECOGNITIONSYSTEMS Predicted label without spaces: ABSFRACJAUDIOPAFLBRNRBCOGNIIIONISANIMPORWAXPRBSPRCHLOPICINUHBMAYJACHINBLKARNIXGARBAANDINCIDUDBSSEVBRAKLAYSKSSUCHASAUDIOLAYGGINGACOUSFTCSCYJBNBCLASSIFICAWIONANDSOUXDBVLJFNFDKBCJIONRBCBXLLXNBURALNBRPWORKSHAVEBBBNAPPLIBDLOSOLVBAUDIOPAFFJFRNRFCORGNJIIONPROBLMPRYJBSHOWBVJFRJFVIOUSSYSIBMSFOCUSONSMAHLDAXASTJFFSWHICHKJMIRISIHBPBREORMANCHBOFAUDIOPAFFBRNRBCOGNIIIOXSXSLIBMS Accuracy: (51/345) Actual label: ABSTRACT AUDIO PATTERN RECOGNITION IS AN IMPORTANT RESEARCH TOPIC IN THE MACHINE LEARNING AREA AND INCLUDES SEVERAL TASKS SUCH AS AUDIO TAGGING ACOUSTIC SCENE CLASSIFICATION AND SOUND EVENT DETECTION RECENTLY NEURAL NETWORKS HAVE BEEN APPLIED TO SOLVE AUDIO PATTERN RECOGNITION PROBLEMS HOWEVER PREVIOUS SYSTEMS FOCUS ON SMALL DATASETS WHICH LIMITS THE PERFORMANCE OF AUDIO PATTERN RECOGNITION SYSTEMS Predicted label with spaces: ABSFRACJ AUDIO PAFLBRN RBCOGNIIION IS AN IMPORWAXP RBSP RCH LOPIC IN UHB MA Y JA C HINB LKARNIXG ARBA AND INCIDUDBS SEVBRAK LAYSKS SUCH AS AUDIO LA YGGING ACOUSFTC SC Y JBNB CLASSIFICAWION AND SOUXD BV L JFNF DK BCJION RBCBXLLX NBURAL NBRPW ORKS HAVE BBBN APPLIBD LO SOLVB AUDIO PAFFJFRN RFCO RGNJIION PROBL M PR Y J B S HOWBVJFR JFVIOUS SYSIBMS FOCUS ON SMAHL DAXAS T JFFS W HICH KJMIRIS IHB PBREORMANCHB OF AUDIO PAFFBRN RBCOGNIIIOX SXSLIBMS Accuracy: (206/401)
Model 2¶
This model has different hyperparameters. I used a slightly higher learning rate and weight decay. I also used a slightly lower momentum.
In depth discussion about model results are after the cell below.
learningRate = 1.5e-3 # Set this value between 1e-2 to 1e-4
weightDecay = 1.5e-3 # Set this value between 1e-2 to 1e-4
momentum = 0.85 # Adding momentum to potentially improve training using SGD
epochs = 30
model = CustomCharacterPredictor()
optimizer = torch.optim.SGD(model.parameters(), lr=learningRate, weight_decay=weightDecay, momentum=momentum)
res = trainingLoop(model, optimizer, epochs, dataloader_train, dataloader_val, dataloader_test)
**** Starting run_1701991247 **** Epoch 0 training loss: 416.857635 [ 2560/99840], accuracy 2.93% [ 75/ 2560] training loss: 417.506714 [ 5120/99840], accuracy 3.46% [ 177/ 5120] training loss: 415.357849 [ 7680/99840], accuracy 3.97% [ 305/ 7680] training loss: 415.842743 [10240/99840], accuracy 4.37% [ 447/10240] training loss: 414.634918 [12800/99840], accuracy 4.88% [ 624/12800] training loss: 414.922302 [15360/99840], accuracy 5.35% [ 821/15360] training loss: 414.839386 [17920/99840], accuracy 5.79% [ 1037/17920] training loss: 412.392273 [20480/99840], accuracy 6.22% [ 1274/20480] training loss: 412.465302 [23040/99840], accuracy 6.73% [ 1550/23040] training loss: 413.403290 [25600/99840], accuracy 7.24% [ 1853/25600] training loss: 409.933960 [28160/99840], accuracy 7.84% [ 2207/28160] training loss: 411.430176 [30720/99840], accuracy 8.28% [ 2544/30720] training loss: 409.756836 [33280/99840], accuracy 8.73% [ 2906/33280] training loss: 407.538361 [35840/99840], accuracy 9.30% [ 3334/35840] training loss: 408.187775 [38400/99840], accuracy 9.89% [ 3799/38400] training loss: 399.967896 [40960/99840], accuracy 10.52% [ 4309/40960] training loss: 398.259003 [43520/99840], accuracy 11.16% [ 4857/43520] training loss: 401.357971 [46080/99840], accuracy 11.80% [ 5437/46080] training loss: 398.476349 [48640/99840], accuracy 12.49% [ 6075/48640] training loss: 397.481506 [51200/99840], accuracy 13.13% [ 6723/51200] training loss: 393.583038 [53760/99840], accuracy 13.70% [ 7364/53760] training loss: 392.513275 [56320/99840], accuracy 14.37% [ 8094/56320] training loss: 395.405121 [58880/99840], accuracy 14.99% [ 8829/58880] training loss: 393.396362 [61440/99840], accuracy 15.61% [ 9593/61440] training loss: 390.662689 [64000/99840], accuracy 16.21% [10373/64000] training loss: 383.716705 [66560/99840], accuracy 16.84% [11209/66560] training loss: 387.946136 [69120/99840], accuracy 17.41% [12036/69120] training loss: 389.628479 [71680/99840], accuracy 17.97% [12879/71680] training loss: 386.048462 [74240/99840], accuracy 18.52% [13748/74240] training loss: 382.990723 [76800/99840], accuracy 19.05% [14634/76800] training loss: 392.478882 [79360/99840], accuracy 19.56% [15519/79360] training loss: 387.108398 [81920/99840], accuracy 20.09% [16458/81920] training loss: 390.063965 [84480/99840], accuracy 20.58% [17386/84480] training loss: 378.776733 [87040/99840], accuracy 21.05% [18322/87040] training loss: 373.585632 [89600/99840], accuracy 21.53% [19292/89600] training loss: 380.462982 [92160/99840], accuracy 22.00% [20277/92160] training loss: 380.409180 [94720/99840], accuracy 22.46% [21276/94720] training loss: 379.123901 [97280/99840], accuracy 22.97% [22342/97280] training loss: 389.645996 [99840/99840], accuracy 23.40% [23366/99840] training avg loss: 3.110998 [99840/99840] training accuracy: 23.40% [23366/99840] validation avg loss: 2.919173 validation accuracy: 43.71% [10911/24960] saving model Epoch 1 training loss: 383.017365 [ 2560/99840], accuracy 44.45% [ 1138/ 2560] training loss: 366.658661 [ 5120/99840], accuracy 43.57% [ 2231/ 5120] training loss: 366.400116 [ 7680/99840], accuracy 43.75% [ 3360/ 7680] training loss: 371.738312 [10240/99840], accuracy 43.72% [ 4477/10240] training loss: 372.971893 [12800/99840], accuracy 44.21% [ 5659/12800] training loss: 369.632874 [15360/99840], accuracy 44.31% [ 6806/15360] training loss: 370.968567 [17920/99840], accuracy 44.52% [ 7978/17920] training loss: 373.515045 [20480/99840], accuracy 44.70% [ 9154/20480] training loss: 371.097290 [23040/99840], accuracy 44.97% [10360/23040] training loss: 364.727173 [25600/99840], accuracy 45.08% [11541/25600] training loss: 366.772339 [28160/99840], accuracy 45.28% [12752/28160] training loss: 369.132080 [30720/99840], accuracy 45.52% [13983/30720] training loss: 362.398163 [33280/99840], accuracy 45.80% [15243/33280] training loss: 361.773132 [35840/99840], accuracy 46.11% [16526/35840] training loss: 367.484253 [38400/99840], accuracy 46.35% [17797/38400] training loss: 367.168793 [40960/99840], accuracy 46.52% [19054/40960] training loss: 363.728790 [43520/99840], accuracy 46.69% [20318/43520] training loss: 361.019409 [46080/99840], accuracy 46.89% [21606/46080] training loss: 369.098022 [48640/99840], accuracy 47.00% [22861/48640] training loss: 358.261230 [51200/99840], accuracy 47.24% [24188/51200] training loss: 361.667419 [53760/99840], accuracy 47.52% [25548/53760] training loss: 362.756653 [56320/99840], accuracy 47.66% [26844/56320] training loss: 361.976044 [58880/99840], accuracy 47.94% [28227/58880] training loss: 356.193878 [61440/99840], accuracy 48.32% [29685/61440] training loss: 352.840729 [64000/99840], accuracy 48.57% [31083/64000] training loss: 361.535614 [66560/99840], accuracy 48.78% [32470/66560] training loss: 355.435516 [69120/99840], accuracy 48.99% [33863/69120] training loss: 358.952850 [71680/99840], accuracy 49.21% [35275/71680] training loss: 353.952179 [74240/99840], accuracy 49.47% [36727/74240] training loss: 355.298309 [76800/99840], accuracy 49.72% [38182/76800] training loss: 366.536407 [79360/99840], accuracy 49.92% [39620/79360] training loss: 362.854401 [81920/99840], accuracy 50.13% [41069/81920] training loss: 351.669830 [84480/99840], accuracy 50.34% [42528/84480] training loss: 358.613556 [87040/99840], accuracy 50.58% [44028/87040] training loss: 346.069336 [89600/99840], accuracy 50.82% [45535/89600] training loss: 355.915405 [92160/99840], accuracy 51.03% [47027/92160] training loss: 354.252686 [94720/99840], accuracy 51.25% [48542/94720] training loss: 356.235229 [97280/99840], accuracy 51.42% [50023/97280] training loss: 365.423645 [99840/99840], accuracy 51.59% [51511/99840] training avg loss: 2.836646 [99840/99840] training accuracy: 51.59% [51511/99840] validation avg loss: 2.738381 validation accuracy: 60.40% [15077/24960] saving model Epoch 2 training loss: 355.171631 [ 2560/99840], accuracy 58.01% [ 1485/ 2560] training loss: 358.097992 [ 5120/99840], accuracy 59.55% [ 3049/ 5120] training loss: 356.901825 [ 7680/99840], accuracy 59.27% [ 4552/ 7680] training loss: 358.257355 [10240/99840], accuracy 59.03% [ 6045/10240] training loss: 358.601288 [12800/99840], accuracy 59.22% [ 7580/12800] training loss: 350.190979 [15360/99840], accuracy 59.26% [ 9103/15360] training loss: 354.026733 [17920/99840], accuracy 59.41% [10646/17920] training loss: 344.825134 [20480/99840], accuracy 59.70% [12226/20480] training loss: 360.863495 [23040/99840], accuracy 59.69% [13753/23040] training loss: 350.042877 [25600/99840], accuracy 59.80% [15308/25600] training loss: 356.104584 [28160/99840], accuracy 59.96% [16886/28160] training loss: 343.593292 [30720/99840], accuracy 60.16% [18480/30720] training loss: 337.856842 [33280/99840], accuracy 60.27% [20057/33280] training loss: 346.126251 [35840/99840], accuracy 60.33% [21622/35840] training loss: 351.780914 [38400/99840], accuracy 60.46% [23215/38400] training loss: 347.846680 [40960/99840], accuracy 60.53% [24794/40960] training loss: 339.933350 [43520/99840], accuracy 60.80% [26458/43520] training loss: 348.921051 [46080/99840], accuracy 60.95% [28088/46080] training loss: 342.405090 [48640/99840], accuracy 61.23% [29782/48640] training loss: 345.564728 [51200/99840], accuracy 61.41% [31444/51200] training loss: 347.080139 [53760/99840], accuracy 61.59% [33113/53760] training loss: 342.876068 [56320/99840], accuracy 61.77% [34791/56320] training loss: 346.740845 [58880/99840], accuracy 61.91% [36452/58880] training loss: 346.246582 [61440/99840], accuracy 62.05% [38124/61440] training loss: 345.696808 [64000/99840], accuracy 62.15% [39779/64000] training loss: 340.658661 [66560/99840], accuracy 62.26% [41440/66560] training loss: 341.659668 [69120/99840], accuracy 62.43% [43150/69120] training loss: 341.748230 [71680/99840], accuracy 62.49% [44795/71680] training loss: 347.957855 [74240/99840], accuracy 62.61% [46482/74240] training loss: 340.891022 [76800/99840], accuracy 62.73% [48175/76800] training loss: 344.009735 [79360/99840], accuracy 62.84% [49870/79360] training loss: 349.040131 [81920/99840], accuracy 62.99% [51602/81920] training loss: 350.471100 [84480/99840], accuracy 63.10% [53306/84480] training loss: 343.528931 [87040/99840], accuracy 63.20% [55013/87040] training loss: 346.401245 [89600/99840], accuracy 63.31% [56728/89600] training loss: 339.622711 [92160/99840], accuracy 63.41% [58442/92160] training loss: 350.691437 [94720/99840], accuracy 63.50% [60144/94720] training loss: 345.105835 [97280/99840], accuracy 63.57% [61838/97280] training loss: 342.376160 [99840/99840], accuracy 63.70% [63603/99840] training avg loss: 2.712416 [99840/99840] training accuracy: 63.70% [63603/99840] validation avg loss: 2.656332 validation accuracy: 67.88% [16942/24960] saving model Epoch 3 training loss: 337.752197 [ 2560/99840], accuracy 66.02% [ 1690/ 2560] training loss: 344.197113 [ 5120/99840], accuracy 66.91% [ 3426/ 5120] training loss: 338.238831 [ 7680/99840], accuracy 67.06% [ 5150/ 7680] training loss: 334.930298 [10240/99840], accuracy 67.25% [ 6886/10240] training loss: 346.286499 [12800/99840], accuracy 67.59% [ 8652/12800] training loss: 336.210938 [15360/99840], accuracy 67.55% [10376/15360] training loss: 339.199188 [17920/99840], accuracy 67.52% [12099/17920] training loss: 337.018799 [20480/99840], accuracy 67.54% [13833/20480] training loss: 342.990723 [23040/99840], accuracy 67.61% [15578/23040] training loss: 336.298187 [25600/99840], accuracy 67.63% [17313/25600] training loss: 339.040894 [28160/99840], accuracy 67.67% [19057/28160] training loss: 339.124847 [30720/99840], accuracy 67.69% [20795/30720] training loss: 346.922729 [33280/99840], accuracy 67.81% [22566/33280] training loss: 336.948853 [35840/99840], accuracy 67.95% [24353/35840] training loss: 336.066101 [38400/99840], accuracy 68.00% [26111/38400] training loss: 348.166351 [40960/99840], accuracy 68.02% [27859/40960] training loss: 338.700500 [43520/99840], accuracy 68.25% [29703/43520] training loss: 336.242798 [46080/99840], accuracy 68.34% [31492/46080] training loss: 333.806000 [48640/99840], accuracy 68.56% [33346/48640] training loss: 340.140991 [51200/99840], accuracy 68.69% [35171/51200] training loss: 336.506165 [53760/99840], accuracy 68.90% [37038/53760] training loss: 334.988953 [56320/99840], accuracy 69.02% [38874/56320] training loss: 331.292969 [58880/99840], accuracy 69.15% [40715/58880] training loss: 338.501282 [61440/99840], accuracy 69.32% [42593/61440] training loss: 332.266846 [64000/99840], accuracy 69.46% [44453/64000] training loss: 334.821381 [66560/99840], accuracy 69.63% [46343/66560] training loss: 331.117889 [69120/99840], accuracy 69.78% [48231/69120] training loss: 332.619904 [71680/99840], accuracy 69.89% [50099/71680] training loss: 335.767761 [74240/99840], accuracy 70.07% [52020/74240] training loss: 332.681244 [76800/99840], accuracy 70.22% [53929/76800] training loss: 335.107086 [79360/99840], accuracy 70.35% [55827/79360] training loss: 337.428314 [81920/99840], accuracy 70.45% [57716/81920] training loss: 338.737183 [84480/99840], accuracy 70.59% [59636/84480] training loss: 333.028900 [87040/99840], accuracy 70.68% [61517/87040] training loss: 335.943665 [89600/99840], accuracy 70.81% [63448/89600] training loss: 331.736603 [92160/99840], accuracy 70.93% [65370/92160] training loss: 328.078125 [94720/99840], accuracy 71.09% [67340/94720] training loss: 322.732086 [97280/99840], accuracy 71.16% [69221/97280] training loss: 328.941559 [99840/99840], accuracy 71.29% [71172/99840] training avg loss: 2.633701 [99840/99840] training accuracy: 71.29% [71172/99840] validation avg loss: 2.578785 validation accuracy: 76.02% [18974/24960] saving model Epoch 4 training loss: 337.376465 [ 2560/99840], accuracy 74.73% [ 1913/ 2560] training loss: 331.191528 [ 5120/99840], accuracy 75.25% [ 3853/ 5120] training loss: 331.368347 [ 7680/99840], accuracy 75.23% [ 5778/ 7680] training loss: 330.710480 [10240/99840], accuracy 75.35% [ 7716/10240] training loss: 332.191345 [12800/99840], accuracy 75.64% [ 9682/12800] training loss: 330.996460 [15360/99840], accuracy 75.77% [11638/15360] training loss: 329.550903 [17920/99840], accuracy 75.74% [13573/17920] training loss: 329.468414 [20480/99840], accuracy 75.60% [15483/20480] training loss: 332.847412 [23040/99840], accuracy 75.63% [17425/23040] training loss: 334.611664 [25600/99840], accuracy 75.57% [19345/25600] training loss: 330.613525 [28160/99840], accuracy 75.57% [21281/28160] training loss: 324.532562 [30720/99840], accuracy 75.67% [23246/30720] training loss: 329.346741 [33280/99840], accuracy 75.61% [25162/33280] training loss: 332.027344 [35840/99840], accuracy 75.65% [27113/35840] training loss: 325.809357 [38400/99840], accuracy 75.69% [29064/38400] training loss: 325.844727 [40960/99840], accuracy 75.75% [31027/40960] training loss: 333.003571 [43520/99840], accuracy 75.86% [33015/43520] training loss: 329.983612 [46080/99840], accuracy 75.93% [34987/46080] training loss: 333.935364 [48640/99840], accuracy 75.98% [36959/48640] training loss: 325.641388 [51200/99840], accuracy 76.03% [38928/51200] training loss: 327.715881 [53760/99840], accuracy 76.11% [40918/53760] training loss: 328.577423 [56320/99840], accuracy 76.16% [42891/56320] training loss: 329.469666 [58880/99840], accuracy 76.25% [44894/58880] training loss: 329.979980 [61440/99840], accuracy 76.27% [46861/61440] training loss: 328.710632 [64000/99840], accuracy 76.29% [48827/64000] training loss: 327.383026 [66560/99840], accuracy 76.34% [50811/66560] training loss: 328.601776 [69120/99840], accuracy 76.35% [52771/69120] training loss: 333.321381 [71680/99840], accuracy 76.31% [54702/71680] training loss: 333.683960 [74240/99840], accuracy 76.34% [56676/74240] training loss: 322.859436 [76800/99840], accuracy 76.42% [58687/76800] training loss: 333.760742 [79360/99840], accuracy 76.41% [60642/79360] training loss: 329.388245 [81920/99840], accuracy 76.47% [62646/81920] training loss: 328.537109 [84480/99840], accuracy 76.52% [64640/84480] training loss: 332.132111 [87040/99840], accuracy 76.53% [66609/87040] training loss: 330.156647 [89600/99840], accuracy 76.56% [68596/89600] training loss: 335.765381 [92160/99840], accuracy 76.55% [70544/92160] training loss: 323.208160 [94720/99840], accuracy 76.59% [72545/94720] training loss: 326.227539 [97280/99840], accuracy 76.63% [74542/97280] training loss: 328.022644 [99840/99840], accuracy 76.66% [76534/99840] training avg loss: 2.577061 [99840/99840] training accuracy: 76.66% [76534/99840] validation avg loss: 2.555787 validation accuracy: 77.71% [19396/24960] saving model Epoch 5 training loss: 323.306946 [ 2560/99840], accuracy 77.19% [ 1976/ 2560] training loss: 329.082245 [ 5120/99840], accuracy 77.30% [ 3958/ 5120] training loss: 325.312500 [ 7680/99840], accuracy 77.43% [ 5947/ 7680] training loss: 328.240356 [10240/99840], accuracy 77.52% [ 7938/10240] training loss: 324.036407 [12800/99840], accuracy 77.79% [ 9957/12800] training loss: 323.027435 [15360/99840], accuracy 77.96% [11974/15360] training loss: 322.942963 [17920/99840], accuracy 77.89% [13958/17920] training loss: 333.715942 [20480/99840], accuracy 77.73% [15920/20480] training loss: 330.914093 [23040/99840], accuracy 77.72% [17906/23040] training loss: 331.381836 [25600/99840], accuracy 77.59% [19862/25600] training loss: 324.354218 [28160/99840], accuracy 77.59% [21848/28160] training loss: 322.353363 [30720/99840], accuracy 77.68% [23862/30720] training loss: 327.239380 [33280/99840], accuracy 77.70% [25858/33280] training loss: 330.894501 [35840/99840], accuracy 77.66% [27834/35840] training loss: 331.416779 [38400/99840], accuracy 77.74% [29852/38400] training loss: 320.205811 [40960/99840], accuracy 77.70% [31826/40960] training loss: 331.997253 [43520/99840], accuracy 77.73% [33830/43520] training loss: 323.646118 [46080/99840], accuracy 77.69% [35798/46080] training loss: 330.254089 [48640/99840], accuracy 77.78% [37834/48640] training loss: 326.398529 [51200/99840], accuracy 77.85% [39859/51200] training loss: 329.949707 [53760/99840], accuracy 77.87% [41863/53760] training loss: 326.477325 [56320/99840], accuracy 77.82% [43831/56320] training loss: 324.542938 [58880/99840], accuracy 77.88% [45858/58880] training loss: 329.277771 [61440/99840], accuracy 77.89% [47855/61440] training loss: 325.885529 [64000/99840], accuracy 77.86% [49832/64000] training loss: 326.328247 [66560/99840], accuracy 77.92% [51865/66560] training loss: 320.828247 [69120/99840], accuracy 77.92% [53860/69120] training loss: 320.321228 [71680/99840], accuracy 77.97% [55890/71680] training loss: 327.275574 [74240/99840], accuracy 78.00% [57909/74240] training loss: 325.623840 [76800/99840], accuracy 77.98% [59892/76800] training loss: 327.403778 [79360/99840], accuracy 77.97% [61877/79360] training loss: 324.082275 [81920/99840], accuracy 78.02% [63916/81920] training loss: 328.439697 [84480/99840], accuracy 78.01% [65903/84480] training loss: 335.847839 [87040/99840], accuracy 78.03% [67920/87040] training loss: 326.408875 [89600/99840], accuracy 78.05% [69930/89600] training loss: 330.739441 [92160/99840], accuracy 78.08% [71960/92160] training loss: 322.168030 [94720/99840], accuracy 78.08% [73953/94720] training loss: 330.296997 [97280/99840], accuracy 78.06% [75935/97280] training loss: 319.489716 [99840/99840], accuracy 78.09% [77966/99840] training avg loss: 2.556610 [99840/99840] training accuracy: 78.09% [77966/99840] validation avg loss: 2.545959 validation accuracy: 78.45% [19581/24960] saving model Epoch 6 training loss: 320.441589 [ 2560/99840], accuracy 78.20% [ 2002/ 2560] training loss: 322.840332 [ 5120/99840], accuracy 78.22% [ 4005/ 5120] training loss: 330.297394 [ 7680/99840], accuracy 78.27% [ 6011/ 7680] training loss: 323.927979 [10240/99840], accuracy 78.65% [ 8054/10240] training loss: 324.966949 [12800/99840], accuracy 78.84% [10092/12800] training loss: 331.906708 [15360/99840], accuracy 78.67% [12084/15360] training loss: 326.333801 [17920/99840], accuracy 78.54% [14075/17920] training loss: 326.496033 [20480/99840], accuracy 78.53% [16083/20480] training loss: 329.398041 [23040/99840], accuracy 78.53% [18093/23040] training loss: 334.430847 [25600/99840], accuracy 78.58% [20117/25600] training loss: 326.420319 [28160/99840], accuracy 78.68% [22157/28160] training loss: 329.597534 [30720/99840], accuracy 78.62% [24152/30720] training loss: 322.526459 [33280/99840], accuracy 78.62% [26165/33280] training loss: 333.705261 [35840/99840], accuracy 78.67% [28196/35840] training loss: 323.146240 [38400/99840], accuracy 78.71% [30223/38400] training loss: 319.156952 [40960/99840], accuracy 78.74% [32252/40960] training loss: 323.977783 [43520/99840], accuracy 78.78% [34285/43520] training loss: 329.496613 [46080/99840], accuracy 78.85% [36332/46080] training loss: 323.828827 [48640/99840], accuracy 78.85% [38354/48640] training loss: 328.518921 [51200/99840], accuracy 78.80% [40346/51200] training loss: 321.765350 [53760/99840], accuracy 78.76% [42341/53760] training loss: 325.582062 [56320/99840], accuracy 78.80% [44382/56320] training loss: 330.013092 [58880/99840], accuracy 78.82% [46412/58880] training loss: 324.010071 [61440/99840], accuracy 78.81% [48418/61440] training loss: 333.661743 [64000/99840], accuracy 78.85% [50461/64000] training loss: 321.473511 [66560/99840], accuracy 78.86% [52486/66560] training loss: 324.096252 [69120/99840], accuracy 78.85% [54498/69120] training loss: 319.158051 [71680/99840], accuracy 78.82% [56500/71680] training loss: 329.675201 [74240/99840], accuracy 78.85% [58539/74240] training loss: 318.996979 [76800/99840], accuracy 78.88% [60576/76800] training loss: 320.815399 [79360/99840], accuracy 78.91% [62622/79360] training loss: 320.930878 [81920/99840], accuracy 78.90% [64637/81920] training loss: 330.882477 [84480/99840], accuracy 78.92% [66671/84480] training loss: 327.762939 [87040/99840], accuracy 78.95% [68714/87040] training loss: 324.821411 [89600/99840], accuracy 78.94% [70733/89600] training loss: 328.004028 [92160/99840], accuracy 78.92% [72729/92160] training loss: 326.106720 [94720/99840], accuracy 78.92% [74753/94720] training loss: 318.448242 [97280/99840], accuracy 78.92% [76772/97280] training loss: 324.366638 [99840/99840], accuracy 78.92% [78790/99840] training avg loss: 2.544684 [99840/99840] training accuracy: 78.92% [78790/99840] validation avg loss: 2.538291 validation accuracy: 78.94% [19703/24960] saving model Epoch 7 training loss: 326.820099 [ 2560/99840], accuracy 79.45% [ 2034/ 2560] training loss: 323.326050 [ 5120/99840], accuracy 79.55% [ 4073/ 5120] training loss: 327.571167 [ 7680/99840], accuracy 79.79% [ 6128/ 7680] training loss: 328.084747 [10240/99840], accuracy 79.79% [ 8170/10240] training loss: 330.054108 [12800/99840], accuracy 79.66% [10197/12800] training loss: 319.400970 [15360/99840], accuracy 79.78% [12254/15360] training loss: 324.341217 [17920/99840], accuracy 79.75% [14291/17920] training loss: 321.276001 [20480/99840], accuracy 79.74% [16331/20480] training loss: 325.619446 [23040/99840], accuracy 79.65% [18351/23040] training loss: 319.396118 [25600/99840], accuracy 79.79% [20427/25600] training loss: 332.070831 [28160/99840], accuracy 79.77% [22462/28160] training loss: 319.707092 [30720/99840], accuracy 79.90% [24546/30720] training loss: 317.926849 [33280/99840], accuracy 79.80% [26558/33280] training loss: 323.903137 [35840/99840], accuracy 79.86% [28623/35840] training loss: 317.239441 [38400/99840], accuracy 79.92% [30690/38400] training loss: 325.120087 [40960/99840], accuracy 80.01% [32771/40960] training loss: 325.741028 [43520/99840], accuracy 80.07% [34847/43520] training loss: 317.487152 [46080/99840], accuracy 80.16% [36938/46080] training loss: 328.413055 [48640/99840], accuracy 80.26% [39037/48640] training loss: 324.886871 [51200/99840], accuracy 80.30% [41114/51200] training loss: 320.624969 [53760/99840], accuracy 80.39% [43218/53760] training loss: 322.622253 [56320/99840], accuracy 80.53% [45356/56320] training loss: 320.373718 [58880/99840], accuracy 80.66% [47492/58880] training loss: 329.249084 [61440/99840], accuracy 80.76% [49621/61440] training loss: 318.139435 [64000/99840], accuracy 80.88% [51764/64000] training loss: 326.558258 [66560/99840], accuracy 80.96% [53890/66560] training loss: 316.923584 [69120/99840], accuracy 81.11% [56060/69120] training loss: 315.745544 [71680/99840], accuracy 81.24% [58232/71680] training loss: 326.885010 [74240/99840], accuracy 81.34% [60387/74240] training loss: 320.377747 [76800/99840], accuracy 81.47% [62570/76800] training loss: 326.093811 [79360/99840], accuracy 81.53% [64704/79360] training loss: 320.623138 [81920/99840], accuracy 81.65% [66888/81920] training loss: 326.193787 [84480/99840], accuracy 81.74% [69052/84480] training loss: 319.183624 [87040/99840], accuracy 81.79% [71193/87040] training loss: 318.594696 [89600/99840], accuracy 81.85% [73335/89600] training loss: 326.110962 [92160/99840], accuracy 81.92% [75497/92160] training loss: 317.672180 [94720/99840], accuracy 81.99% [77659/94720] training loss: 321.316437 [97280/99840], accuracy 82.05% [79823/97280] training loss: 314.995270 [99840/99840], accuracy 82.12% [81984/99840] training avg loss: 2.517797 [99840/99840] training accuracy: 82.12% [81984/99840] validation avg loss: 2.483794 validation accuracy: 85.12% [21247/24960] saving model Epoch 8 training loss: 320.936554 [ 2560/99840], accuracy 85.51% [ 2189/ 2560] training loss: 314.952606 [ 5120/99840], accuracy 85.64% [ 4385/ 5120] training loss: 311.632416 [ 7680/99840], accuracy 85.47% [ 6564/ 7680] training loss: 314.151733 [10240/99840], accuracy 85.56% [ 8761/10240] training loss: 327.759186 [12800/99840], accuracy 85.55% [10951/12800] training loss: 317.005005 [15360/99840], accuracy 85.54% [13139/15360] training loss: 314.715851 [17920/99840], accuracy 85.66% [15351/17920] training loss: 319.582428 [20480/99840], accuracy 85.51% [17512/20480] training loss: 321.189697 [23040/99840], accuracy 85.50% [19699/23040] training loss: 318.356964 [25600/99840], accuracy 85.55% [21900/25600] training loss: 321.818909 [28160/99840], accuracy 85.55% [24090/28160] training loss: 317.289795 [30720/99840], accuracy 85.60% [26295/30720] training loss: 323.934174 [33280/99840], accuracy 85.49% [28452/33280] training loss: 312.536072 [35840/99840], accuracy 85.53% [30655/35840] training loss: 317.778259 [38400/99840], accuracy 85.57% [32859/38400] training loss: 315.595337 [40960/99840], accuracy 85.52% [35028/40960] training loss: 312.518280 [43520/99840], accuracy 85.62% [37260/43520] training loss: 317.651703 [46080/99840], accuracy 85.58% [39433/46080] training loss: 313.867615 [48640/99840], accuracy 85.53% [41603/48640] training loss: 312.665619 [51200/99840], accuracy 85.62% [43836/51200] training loss: 313.483673 [53760/99840], accuracy 85.63% [46037/53760] training loss: 319.716766 [56320/99840], accuracy 85.64% [48230/56320] training loss: 321.304810 [58880/99840], accuracy 85.60% [50403/58880] training loss: 320.529785 [61440/99840], accuracy 85.66% [52628/61440] training loss: 326.693390 [64000/99840], accuracy 85.65% [54817/64000] training loss: 321.936584 [66560/99840], accuracy 85.68% [57029/66560] training loss: 319.331421 [69120/99840], accuracy 85.69% [59229/69120] training loss: 322.315460 [71680/99840], accuracy 85.72% [61441/71680] training loss: 313.656647 [74240/99840], accuracy 85.74% [63652/74240] training loss: 317.362152 [76800/99840], accuracy 85.74% [65845/76800] training loss: 315.811279 [79360/99840], accuracy 85.74% [68044/79360] training loss: 318.137970 [81920/99840], accuracy 85.76% [70253/81920] training loss: 318.188568 [84480/99840], accuracy 85.77% [72457/84480] training loss: 313.112427 [87040/99840], accuracy 85.80% [74681/87040] training loss: 312.264740 [89600/99840], accuracy 85.81% [76885/89600] training loss: 318.933472 [92160/99840], accuracy 85.86% [79124/92160] training loss: 320.865112 [94720/99840], accuracy 85.89% [81351/94720] training loss: 321.371094 [97280/99840], accuracy 85.86% [83526/97280] training loss: 312.938843 [99840/99840], accuracy 85.86% [85726/99840] training avg loss: 2.480539 [99840/99840] training accuracy: 85.86% [85726/99840] validation avg loss: 2.470244 validation accuracy: 86.11% [21494/24960] saving model Epoch 9 training loss: 317.168091 [ 2560/99840], accuracy 85.94% [ 2200/ 2560] training loss: 313.543243 [ 5120/99840], accuracy 86.19% [ 4413/ 5120] training loss: 317.326996 [ 7680/99840], accuracy 86.07% [ 6610/ 7680] training loss: 313.113129 [10240/99840], accuracy 86.24% [ 8831/10240] training loss: 308.981781 [12800/99840], accuracy 86.20% [11033/12800] training loss: 318.074219 [15360/99840], accuracy 86.23% [13245/15360] training loss: 312.836517 [17920/99840], accuracy 86.32% [15469/17920] training loss: 321.419556 [20480/99840], accuracy 86.24% [17662/20480] training loss: 314.154877 [23040/99840], accuracy 86.23% [19868/23040] training loss: 316.932159 [25600/99840], accuracy 86.30% [22092/25600] training loss: 314.119965 [28160/99840], accuracy 86.29% [24300/28160] training loss: 316.803253 [30720/99840], accuracy 86.32% [26519/30720] training loss: 316.907349 [33280/99840], accuracy 86.38% [28747/33280] training loss: 315.977509 [35840/99840], accuracy 86.42% [30974/35840] training loss: 316.093384 [38400/99840], accuracy 86.52% [33222/38400] training loss: 324.273682 [40960/99840], accuracy 86.45% [35408/40960] training loss: 320.790802 [43520/99840], accuracy 86.53% [37656/43520] training loss: 312.019043 [46080/99840], accuracy 86.55% [39880/46080] training loss: 317.684967 [48640/99840], accuracy 86.51% [42079/48640] training loss: 313.547668 [51200/99840], accuracy 86.52% [44298/51200] training loss: 311.017578 [53760/99840], accuracy 86.51% [46507/53760] training loss: 315.774841 [56320/99840], accuracy 86.51% [48722/56320] training loss: 318.457397 [58880/99840], accuracy 86.54% [50956/58880] training loss: 312.799896 [61440/99840], accuracy 86.57% [53191/61440] training loss: 318.497620 [64000/99840], accuracy 86.56% [55401/64000] training loss: 315.308807 [66560/99840], accuracy 86.62% [57651/66560] training loss: 313.949463 [69120/99840], accuracy 86.62% [59872/69120] training loss: 321.082123 [71680/99840], accuracy 86.63% [62093/71680] training loss: 316.818909 [74240/99840], accuracy 86.66% [64334/74240] training loss: 319.396576 [76800/99840], accuracy 86.64% [66537/76800] training loss: 319.448334 [79360/99840], accuracy 86.64% [68754/79360] training loss: 317.985413 [81920/99840], accuracy 86.62% [70959/81920] training loss: 315.742645 [84480/99840], accuracy 86.61% [73168/84480] training loss: 318.623383 [87040/99840], accuracy 86.63% [75406/87040] training loss: 313.332123 [89600/99840], accuracy 86.66% [77644/89600] training loss: 316.935760 [92160/99840], accuracy 86.67% [79871/92160] training loss: 310.601654 [94720/99840], accuracy 86.67% [82097/94720] training loss: 309.520477 [97280/99840], accuracy 86.68% [84324/97280] training loss: 315.188873 [99840/99840], accuracy 86.70% [86565/99840] training avg loss: 2.468327 [99840/99840] training accuracy: 86.70% [86565/99840] validation avg loss: 2.463811 validation accuracy: 86.59% [21614/24960] saving model Epoch 10 training loss: 323.287506 [ 2560/99840], accuracy 86.84% [ 2223/ 2560] training loss: 314.255127 [ 5120/99840], accuracy 87.34% [ 4472/ 5120] training loss: 312.153534 [ 7680/99840], accuracy 87.36% [ 6709/ 7680] training loss: 313.194000 [10240/99840], accuracy 87.55% [ 8965/10240] training loss: 312.368225 [12800/99840], accuracy 87.47% [11196/12800] training loss: 311.669220 [15360/99840], accuracy 87.44% [13431/15360] training loss: 318.144806 [17920/99840], accuracy 87.48% [15677/17920] training loss: 319.050629 [20480/99840], accuracy 87.47% [17914/20480] training loss: 318.282684 [23040/99840], accuracy 87.43% [20145/23040] training loss: 313.354736 [25600/99840], accuracy 87.35% [22361/25600] training loss: 312.626892 [28160/99840], accuracy 87.44% [24622/28160] training loss: 312.982025 [30720/99840], accuracy 87.36% [26838/30720] training loss: 314.202179 [33280/99840], accuracy 87.39% [29085/33280] training loss: 316.441956 [35840/99840], accuracy 87.41% [31328/35840] training loss: 311.735596 [38400/99840], accuracy 87.44% [33577/38400] training loss: 316.814575 [40960/99840], accuracy 87.37% [35788/40960] training loss: 317.192261 [43520/99840], accuracy 87.31% [37998/43520] training loss: 319.210236 [46080/99840], accuracy 87.30% [40226/46080] training loss: 313.340363 [48640/99840], accuracy 87.30% [42462/48640] training loss: 319.729340 [51200/99840], accuracy 87.31% [44703/51200] training loss: 318.750549 [53760/99840], accuracy 87.25% [46907/53760] training loss: 319.859833 [56320/99840], accuracy 87.24% [49133/56320] training loss: 319.844421 [58880/99840], accuracy 87.25% [51371/58880] training loss: 315.829681 [61440/99840], accuracy 87.23% [53596/61440] training loss: 312.626984 [64000/99840], accuracy 87.22% [55818/64000] training loss: 314.645874 [66560/99840], accuracy 87.20% [58041/66560] training loss: 312.788788 [69120/99840], accuracy 87.20% [60276/69120] training loss: 314.643036 [71680/99840], accuracy 87.19% [62499/71680] training loss: 325.373932 [74240/99840], accuracy 87.19% [64728/74240] training loss: 316.835327 [76800/99840], accuracy 87.19% [66962/76800] training loss: 317.500000 [79360/99840], accuracy 87.19% [69191/79360] training loss: 314.991089 [81920/99840], accuracy 87.19% [71424/81920] training loss: 316.195953 [84480/99840], accuracy 87.23% [73695/84480] training loss: 312.673920 [87040/99840], accuracy 87.24% [75933/87040] training loss: 319.749115 [89600/99840], accuracy 87.23% [78161/89600] training loss: 313.197021 [92160/99840], accuracy 87.22% [80380/92160] training loss: 316.522522 [94720/99840], accuracy 87.22% [82612/94720] training loss: 317.385986 [97280/99840], accuracy 87.23% [84857/97280] training loss: 315.242371 [99840/99840], accuracy 87.21% [87068/99840] training avg loss: 2.461763 [99840/99840] training accuracy: 87.21% [87068/99840] validation avg loss: 2.460575 validation accuracy: 86.78% [21660/24960] saving model Epoch 11 training loss: 309.750458 [ 2560/99840], accuracy 88.83% [ 2274/ 2560] training loss: 310.912140 [ 5120/99840], accuracy 88.26% [ 4519/ 5120] training loss: 313.745178 [ 7680/99840], accuracy 87.80% [ 6743/ 7680] training loss: 311.115295 [10240/99840], accuracy 87.77% [ 8988/10240] training loss: 319.003815 [12800/99840], accuracy 87.78% [11236/12800] training loss: 308.298553 [15360/99840], accuracy 87.73% [13475/15360] training loss: 317.236603 [17920/99840], accuracy 87.71% [15718/17920] training loss: 313.503082 [20480/99840], accuracy 87.79% [17980/20480] training loss: 311.572327 [23040/99840], accuracy 87.74% [20216/23040] training loss: 314.503052 [25600/99840], accuracy 87.77% [22470/25600] training loss: 316.264954 [28160/99840], accuracy 87.72% [24702/28160] training loss: 311.689026 [30720/99840], accuracy 87.69% [26938/30720] training loss: 320.186981 [33280/99840], accuracy 87.66% [29172/33280] training loss: 311.769379 [35840/99840], accuracy 87.61% [31401/35840] training loss: 320.233154 [38400/99840], accuracy 87.59% [33634/38400] training loss: 319.671539 [40960/99840], accuracy 87.65% [35900/40960] training loss: 315.718628 [43520/99840], accuracy 87.64% [38141/43520] training loss: 313.576080 [46080/99840], accuracy 87.61% [40369/46080] training loss: 319.238220 [48640/99840], accuracy 87.59% [42606/48640] training loss: 314.970703 [51200/99840], accuracy 87.55% [44827/51200] training loss: 308.507874 [53760/99840], accuracy 87.53% [47056/53760] training loss: 319.511108 [56320/99840], accuracy 87.55% [49306/56320] training loss: 318.703033 [58880/99840], accuracy 87.58% [51569/58880] training loss: 314.883911 [61440/99840], accuracy 87.58% [53812/61440] training loss: 314.746277 [64000/99840], accuracy 87.58% [56050/64000] training loss: 316.304779 [66560/99840], accuracy 87.52% [58253/66560] training loss: 315.089508 [69120/99840], accuracy 87.55% [60517/69120] training loss: 311.971802 [71680/99840], accuracy 87.58% [62777/71680] training loss: 312.319611 [74240/99840], accuracy 87.56% [65002/74240] training loss: 310.682953 [76800/99840], accuracy 87.60% [67274/76800] training loss: 311.471069 [79360/99840], accuracy 87.59% [69510/79360] training loss: 312.476227 [81920/99840], accuracy 87.60% [71759/81920] training loss: 310.842194 [84480/99840], accuracy 87.63% [74030/84480] training loss: 317.787842 [87040/99840], accuracy 87.67% [76305/87040] training loss: 311.700867 [89600/99840], accuracy 87.68% [78557/89600] training loss: 313.675781 [92160/99840], accuracy 87.68% [80809/92160] training loss: 317.977661 [94720/99840], accuracy 87.72% [83086/94720] training loss: 312.581787 [97280/99840], accuracy 87.75% [85362/97280] training loss: 312.462158 [99840/99840], accuracy 87.75% [87614/99840] training avg loss: 2.455256 [99840/99840] training accuracy: 87.75% [87614/99840] validation avg loss: 2.452763 validation accuracy: 87.54% [21850/24960] saving model Epoch 12 training loss: 312.745178 [ 2560/99840], accuracy 87.77% [ 2247/ 2560] training loss: 311.318420 [ 5120/99840], accuracy 87.97% [ 4504/ 5120] training loss: 313.624054 [ 7680/99840], accuracy 88.07% [ 6764/ 7680] training loss: 316.882538 [10240/99840], accuracy 88.12% [ 9023/10240] training loss: 315.489166 [12800/99840], accuracy 88.14% [11282/12800] training loss: 310.440155 [15360/99840], accuracy 88.21% [13549/15360] training loss: 312.316528 [17920/99840], accuracy 88.17% [15800/17920] training loss: 315.441681 [20480/99840], accuracy 88.31% [18085/20480] training loss: 316.930054 [23040/99840], accuracy 88.36% [20359/23040] training loss: 308.559509 [25600/99840], accuracy 88.41% [22633/25600] training loss: 317.237396 [28160/99840], accuracy 88.41% [24896/28160] training loss: 308.766418 [30720/99840], accuracy 88.40% [27158/30720] training loss: 317.535980 [33280/99840], accuracy 88.43% [29429/33280] training loss: 310.080811 [35840/99840], accuracy 88.38% [31674/35840] training loss: 313.438812 [38400/99840], accuracy 88.47% [33972/38400] training loss: 308.406250 [40960/99840], accuracy 88.54% [36266/40960] training loss: 310.652222 [43520/99840], accuracy 88.54% [38533/43520] training loss: 313.815704 [46080/99840], accuracy 88.50% [40780/46080] training loss: 310.419159 [48640/99840], accuracy 88.50% [43044/48640] training loss: 318.092285 [51200/99840], accuracy 88.50% [45314/51200] training loss: 310.290466 [53760/99840], accuracy 88.54% [47598/53760] training loss: 314.921295 [56320/99840], accuracy 88.55% [49869/56320] training loss: 311.273407 [58880/99840], accuracy 88.58% [52153/58880] training loss: 311.807983 [61440/99840], accuracy 88.61% [54443/61440] training loss: 314.608276 [64000/99840], accuracy 88.59% [56697/64000] training loss: 319.030212 [66560/99840], accuracy 88.57% [58954/66560] training loss: 318.754974 [69120/99840], accuracy 88.59% [61236/69120] training loss: 312.331512 [71680/99840], accuracy 88.57% [63489/71680] training loss: 310.796844 [74240/99840], accuracy 88.57% [65757/74240] training loss: 308.180969 [76800/99840], accuracy 88.62% [68058/76800] training loss: 313.288208 [79360/99840], accuracy 88.64% [70341/79360] training loss: 314.314575 [81920/99840], accuracy 88.66% [72629/81920] training loss: 315.299805 [84480/99840], accuracy 88.65% [74889/84480] training loss: 316.020264 [87040/99840], accuracy 88.62% [77139/87040] training loss: 311.762543 [89600/99840], accuracy 88.62% [79407/89600] training loss: 315.827972 [92160/99840], accuracy 88.64% [81692/92160] training loss: 312.664185 [94720/99840], accuracy 88.63% [83952/94720] training loss: 313.184082 [97280/99840], accuracy 88.62% [86213/97280] training loss: 313.910004 [99840/99840], accuracy 88.60% [88462/99840] training avg loss: 2.446789 [99840/99840] training accuracy: 88.60% [88462/99840] validation avg loss: 2.448861 validation accuracy: 87.89% [21937/24960] saving model Epoch 13 training loss: 313.791595 [ 2560/99840], accuracy 88.05% [ 2254/ 2560] training loss: 311.988617 [ 5120/99840], accuracy 88.14% [ 4513/ 5120] training loss: 314.933167 [ 7680/99840], accuracy 88.27% [ 6779/ 7680] training loss: 315.742676 [10240/99840], accuracy 88.34% [ 9046/10240] training loss: 312.151611 [12800/99840], accuracy 88.57% [11337/12800] training loss: 311.146637 [15360/99840], accuracy 88.61% [13611/15360] training loss: 310.440094 [17920/99840], accuracy 88.77% [15907/17920] training loss: 318.581573 [20480/99840], accuracy 88.68% [18162/20480] training loss: 309.622772 [23040/99840], accuracy 88.55% [20402/23040] training loss: 315.006836 [25600/99840], accuracy 88.50% [22655/25600] training loss: 309.673859 [28160/99840], accuracy 88.45% [24907/28160] training loss: 320.754425 [30720/99840], accuracy 88.41% [27161/30720] training loss: 318.076660 [33280/99840], accuracy 88.41% [29422/33280] training loss: 320.228821 [35840/99840], accuracy 88.53% [31729/35840] training loss: 315.238220 [38400/99840], accuracy 88.63% [34033/38400] training loss: 311.588715 [40960/99840], accuracy 88.69% [36326/40960] training loss: 311.478851 [43520/99840], accuracy 88.73% [38615/43520] training loss: 313.189972 [46080/99840], accuracy 88.77% [40903/46080] training loss: 313.366394 [48640/99840], accuracy 88.79% [43189/48640] training loss: 315.494537 [51200/99840], accuracy 88.80% [45465/51200] training loss: 307.425415 [53760/99840], accuracy 88.82% [47752/53760] training loss: 312.735413 [56320/99840], accuracy 88.80% [50014/56320] training loss: 315.353882 [58880/99840], accuracy 88.83% [52304/58880] training loss: 310.395264 [61440/99840], accuracy 88.89% [54614/61440] training loss: 313.728333 [64000/99840], accuracy 88.89% [56887/64000] training loss: 316.634888 [66560/99840], accuracy 88.89% [59167/66560] training loss: 306.644714 [69120/99840], accuracy 88.90% [61445/69120] training loss: 313.438660 [71680/99840], accuracy 88.91% [63729/71680] training loss: 308.246185 [74240/99840], accuracy 88.90% [66003/74240] training loss: 316.980957 [76800/99840], accuracy 88.93% [68301/76800] training loss: 316.305756 [79360/99840], accuracy 88.94% [70582/79360] training loss: 316.281189 [81920/99840], accuracy 88.96% [72872/81920] training loss: 318.982056 [84480/99840], accuracy 88.94% [75135/84480] training loss: 310.519073 [87040/99840], accuracy 88.95% [77421/87040] training loss: 313.440460 [89600/99840], accuracy 88.92% [79674/89600] training loss: 309.745789 [92160/99840], accuracy 88.94% [81964/92160] training loss: 314.538605 [94720/99840], accuracy 88.92% [84227/94720] training loss: 312.770630 [97280/99840], accuracy 88.92% [86499/97280] training loss: 309.924774 [99840/99840], accuracy 88.91% [88772/99840] training avg loss: 2.442355 [99840/99840] training accuracy: 88.91% [88772/99840] validation avg loss: 2.446261 validation accuracy: 88.11% [21993/24960] saving model Epoch 14 training loss: 307.839264 [ 2560/99840], accuracy 89.57% [ 2293/ 2560] training loss: 309.823059 [ 5120/99840], accuracy 89.45% [ 4580/ 5120] training loss: 311.649261 [ 7680/99840], accuracy 89.64% [ 6884/ 7680] training loss: 308.887329 [10240/99840], accuracy 89.73% [ 9188/10240] training loss: 310.018341 [12800/99840], accuracy 89.61% [11470/12800] training loss: 308.877197 [15360/99840], accuracy 89.73% [13783/15360] training loss: 315.001038 [17920/99840], accuracy 89.59% [16054/17920] training loss: 313.653595 [20480/99840], accuracy 89.69% [18369/20480] training loss: 318.706055 [23040/99840], accuracy 89.64% [20653/23040] training loss: 314.604095 [25600/99840], accuracy 89.50% [22913/25600] training loss: 311.503662 [28160/99840], accuracy 89.57% [25224/28160] training loss: 311.782562 [30720/99840], accuracy 89.47% [27485/30720] training loss: 313.275208 [33280/99840], accuracy 89.43% [29762/33280] training loss: 307.995483 [35840/99840], accuracy 89.39% [32039/35840] training loss: 313.873291 [38400/99840], accuracy 89.31% [34295/38400] training loss: 311.628754 [40960/99840], accuracy 89.28% [36569/40960] training loss: 318.165497 [43520/99840], accuracy 89.19% [38815/43520] training loss: 306.295227 [46080/99840], accuracy 89.17% [41089/46080] training loss: 313.758911 [48640/99840], accuracy 89.16% [43368/48640] training loss: 312.526306 [51200/99840], accuracy 89.19% [45665/51200] training loss: 303.500702 [53760/99840], accuracy 89.23% [47972/53760] training loss: 305.292114 [56320/99840], accuracy 89.25% [50267/56320] training loss: 317.059052 [58880/99840], accuracy 89.24% [52546/58880] training loss: 311.744141 [61440/99840], accuracy 89.23% [54820/61440] training loss: 310.641968 [64000/99840], accuracy 89.23% [57105/64000] training loss: 306.759369 [66560/99840], accuracy 89.24% [59400/66560] training loss: 314.251617 [69120/99840], accuracy 89.22% [61666/69120] training loss: 308.627136 [71680/99840], accuracy 89.26% [63981/71680] training loss: 310.708618 [74240/99840], accuracy 89.28% [66285/74240] training loss: 309.390961 [76800/99840], accuracy 89.27% [68561/76800] training loss: 314.505493 [79360/99840], accuracy 89.23% [70816/79360] training loss: 309.279358 [81920/99840], accuracy 89.27% [73127/81920] training loss: 312.451019 [84480/99840], accuracy 89.24% [75394/84480] training loss: 309.378326 [87040/99840], accuracy 89.27% [77703/87040] training loss: 313.421265 [89600/99840], accuracy 89.26% [79978/89600] training loss: 313.276581 [92160/99840], accuracy 89.27% [82269/92160] training loss: 315.806061 [94720/99840], accuracy 89.26% [84548/94720] training loss: 312.524994 [97280/99840], accuracy 89.24% [86817/97280] training loss: 316.680298 [99840/99840], accuracy 89.22% [89078/99840] training avg loss: 2.438842 [99840/99840] training accuracy: 89.22% [89078/99840] validation avg loss: 2.444578 validation accuracy: 88.25% [22026/24960] saving model Epoch 15 training loss: 314.937164 [ 2560/99840], accuracy 89.06% [ 2280/ 2560] training loss: 313.057526 [ 5120/99840], accuracy 89.00% [ 4557/ 5120] training loss: 312.899902 [ 7680/99840], accuracy 88.98% [ 6834/ 7680] training loss: 307.555542 [10240/99840], accuracy 89.42% [ 9157/10240] training loss: 312.619568 [12800/99840], accuracy 89.52% [11458/12800] training loss: 309.001984 [15360/99840], accuracy 89.67% [13773/15360] training loss: 313.542297 [17920/99840], accuracy 89.56% [16050/17920] training loss: 312.534088 [20480/99840], accuracy 89.62% [18355/20480] training loss: 313.725220 [23040/99840], accuracy 89.53% [20628/23040] training loss: 309.579529 [25600/99840], accuracy 89.44% [22896/25600] training loss: 306.871277 [28160/99840], accuracy 89.56% [25219/28160] training loss: 312.740509 [30720/99840], accuracy 89.56% [27514/30720] training loss: 313.911774 [33280/99840], accuracy 89.58% [29812/33280] training loss: 321.186768 [35840/99840], accuracy 89.50% [32077/35840] training loss: 316.139252 [38400/99840], accuracy 89.47% [34355/38400] training loss: 310.292053 [40960/99840], accuracy 89.44% [36633/40960] training loss: 313.640259 [43520/99840], accuracy 89.50% [38951/43520] training loss: 315.303223 [46080/99840], accuracy 89.54% [41261/46080] training loss: 319.507263 [48640/99840], accuracy 89.45% [43510/48640] training loss: 310.829803 [51200/99840], accuracy 89.48% [45813/51200] training loss: 313.884857 [53760/99840], accuracy 89.48% [48107/53760] training loss: 309.949341 [56320/99840], accuracy 89.50% [50404/56320] training loss: 314.049561 [58880/99840], accuracy 89.48% [52688/58880] training loss: 306.606873 [61440/99840], accuracy 89.44% [54950/61440] training loss: 314.833221 [64000/99840], accuracy 89.41% [57224/64000] training loss: 312.750702 [66560/99840], accuracy 89.42% [59517/66560] training loss: 309.697144 [69120/99840], accuracy 89.45% [61827/69120] training loss: 308.747101 [71680/99840], accuracy 89.47% [64129/71680] training loss: 309.958466 [74240/99840], accuracy 89.49% [66435/74240] training loss: 309.768768 [76800/99840], accuracy 89.50% [68733/76800] training loss: 308.399109 [79360/99840], accuracy 89.50% [71029/79360] training loss: 307.531311 [81920/99840], accuracy 89.51% [73329/81920] training loss: 309.099182 [84480/99840], accuracy 89.49% [75600/84480] training loss: 314.610474 [87040/99840], accuracy 89.50% [77900/87040] training loss: 311.576172 [89600/99840], accuracy 89.47% [80166/89600] training loss: 314.884277 [92160/99840], accuracy 89.50% [82483/92160] training loss: 314.502533 [94720/99840], accuracy 89.50% [84770/94720] training loss: 313.861389 [97280/99840], accuracy 89.47% [87036/97280] training loss: 313.176910 [99840/99840], accuracy 89.46% [89321/99840] training avg loss: 2.435365 [99840/99840] training accuracy: 89.46% [89321/99840] validation avg loss: 2.443490 validation accuracy: 88.31% [22042/24960] saving model Epoch 16 training loss: 306.864227 [ 2560/99840], accuracy 89.38% [ 2288/ 2560] training loss: 317.495300 [ 5120/99840], accuracy 89.12% [ 4563/ 5120] training loss: 309.496826 [ 7680/99840], accuracy 89.39% [ 6865/ 7680] training loss: 312.024658 [10240/99840], accuracy 89.57% [ 9172/10240] training loss: 307.550079 [12800/99840], accuracy 89.61% [11470/12800] training loss: 310.673523 [15360/99840], accuracy 89.65% [13771/15360] training loss: 313.660919 [17920/99840], accuracy 89.69% [16073/17920] training loss: 311.191071 [20480/99840], accuracy 89.61% [18353/20480] training loss: 308.654388 [23040/99840], accuracy 89.59% [20642/23040] training loss: 310.993622 [25600/99840], accuracy 89.59% [22935/25600] training loss: 310.892242 [28160/99840], accuracy 89.63% [25240/28160] training loss: 316.952637 [30720/99840], accuracy 89.62% [27531/30720] training loss: 315.372925 [33280/99840], accuracy 89.67% [29841/33280] training loss: 315.998474 [35840/99840], accuracy 89.60% [32114/35840] training loss: 307.848236 [38400/99840], accuracy 89.61% [34411/38400] training loss: 311.632843 [40960/99840], accuracy 89.60% [36701/40960] training loss: 307.685028 [43520/99840], accuracy 89.55% [38970/43520] training loss: 309.225311 [46080/99840], accuracy 89.53% [41254/46080] training loss: 312.092102 [48640/99840], accuracy 89.53% [43548/48640] training loss: 311.529572 [51200/99840], accuracy 89.49% [45820/51200] training loss: 315.096191 [53760/99840], accuracy 89.46% [48093/53760] training loss: 313.088531 [56320/99840], accuracy 89.46% [50382/56320] training loss: 311.326752 [58880/99840], accuracy 89.50% [52696/58880] training loss: 308.432648 [61440/99840], accuracy 89.53% [55006/61440] training loss: 310.464508 [64000/99840], accuracy 89.53% [57300/64000] training loss: 315.309540 [66560/99840], accuracy 89.51% [59576/66560] training loss: 310.425873 [69120/99840], accuracy 89.52% [61876/69120] training loss: 307.441284 [71680/99840], accuracy 89.53% [64173/71680] training loss: 310.436401 [74240/99840], accuracy 89.51% [66453/74240] training loss: 308.326172 [76800/99840], accuracy 89.52% [68750/76800] training loss: 314.190765 [79360/99840], accuracy 89.50% [71025/79360] training loss: 307.554077 [81920/99840], accuracy 89.54% [73350/81920] training loss: 310.002502 [84480/99840], accuracy 89.55% [75654/84480] training loss: 311.071777 [87040/99840], accuracy 89.56% [77953/87040] training loss: 309.507629 [89600/99840], accuracy 89.58% [80266/89600] training loss: 303.166382 [92160/99840], accuracy 89.58% [82561/92160] training loss: 310.444214 [94720/99840], accuracy 89.62% [84885/94720] training loss: 315.559265 [97280/99840], accuracy 89.61% [87176/97280] training loss: 316.031219 [99840/99840], accuracy 89.62% [89474/99840] training avg loss: 2.433553 [99840/99840] training accuracy: 89.62% [89474/99840] validation avg loss: 2.442903 validation accuracy: 88.34% [22049/24960] saving model Epoch 17 training loss: 311.308716 [ 2560/99840], accuracy 89.73% [ 2297/ 2560] training loss: 311.941650 [ 5120/99840], accuracy 89.18% [ 4566/ 5120] training loss: 310.963257 [ 7680/99840], accuracy 89.24% [ 6854/ 7680] training loss: 308.299042 [10240/99840], accuracy 89.43% [ 9158/10240] training loss: 312.898468 [12800/99840], accuracy 89.61% [11470/12800] training loss: 308.746765 [15360/99840], accuracy 89.67% [13773/15360] training loss: 306.358673 [17920/99840], accuracy 89.73% [16080/17920] training loss: 314.131134 [20480/99840], accuracy 89.74% [18378/20480] training loss: 308.362213 [23040/99840], accuracy 89.87% [20705/23040] training loss: 306.119385 [25600/99840], accuracy 89.88% [23010/25600] training loss: 307.656525 [28160/99840], accuracy 89.90% [25317/28160] training loss: 307.532501 [30720/99840], accuracy 89.90% [27616/30720] training loss: 309.443726 [33280/99840], accuracy 89.83% [29896/33280] training loss: 310.049011 [35840/99840], accuracy 89.80% [32184/35840] training loss: 306.722534 [38400/99840], accuracy 89.74% [34461/38400] training loss: 313.608398 [40960/99840], accuracy 89.74% [36759/40960] training loss: 313.328949 [43520/99840], accuracy 89.75% [39058/43520] training loss: 313.455872 [46080/99840], accuracy 89.70% [41333/46080] training loss: 308.399567 [48640/99840], accuracy 89.75% [43655/48640] training loss: 308.542328 [51200/99840], accuracy 89.72% [45939/51200] training loss: 318.705231 [53760/99840], accuracy 89.74% [48244/53760] training loss: 312.521942 [56320/99840], accuracy 89.74% [50543/56320] training loss: 307.426971 [58880/99840], accuracy 89.81% [52878/58880] training loss: 310.176605 [61440/99840], accuracy 89.80% [55176/61440] training loss: 314.399170 [64000/99840], accuracy 89.81% [57476/64000] training loss: 313.141022 [66560/99840], accuracy 89.81% [59778/66560] training loss: 316.378082 [69120/99840], accuracy 89.80% [62072/69120] training loss: 314.100250 [71680/99840], accuracy 89.80% [64372/71680] training loss: 306.771149 [74240/99840], accuracy 89.82% [66685/74240] training loss: 313.536163 [76800/99840], accuracy 89.82% [68983/76800] training loss: 314.587921 [79360/99840], accuracy 89.85% [71303/79360] training loss: 309.637604 [81920/99840], accuracy 89.82% [73581/81920] training loss: 310.346405 [84480/99840], accuracy 89.82% [75883/84480] training loss: 308.497437 [87040/99840], accuracy 89.82% [78178/87040] training loss: 315.361176 [89600/99840], accuracy 89.80% [80464/89600] training loss: 308.752106 [92160/99840], accuracy 89.80% [82763/92160] training loss: 304.385620 [94720/99840], accuracy 89.77% [85030/94720] training loss: 312.233154 [97280/99840], accuracy 89.79% [87345/97280] training loss: 310.526855 [99840/99840], accuracy 89.79% [89645/99840] training avg loss: 2.431293 [99840/99840] training accuracy: 89.79% [89645/99840] validation avg loss: 2.442146 validation accuracy: 88.35% [22051/24960] saving model Epoch 18 training loss: 313.938751 [ 2560/99840], accuracy 90.59% [ 2319/ 2560] training loss: 309.841064 [ 5120/99840], accuracy 89.92% [ 4604/ 5120] training loss: 313.694977 [ 7680/99840], accuracy 90.22% [ 6929/ 7680] training loss: 308.032867 [10240/99840], accuracy 90.30% [ 9247/10240] training loss: 309.962585 [12800/99840], accuracy 90.25% [11552/12800] training loss: 309.750946 [15360/99840], accuracy 90.29% [13868/15360] training loss: 313.030121 [17920/99840], accuracy 90.16% [16156/17920] training loss: 314.318970 [20480/99840], accuracy 90.03% [18438/20480] training loss: 313.805267 [23040/99840], accuracy 89.99% [20733/23040] training loss: 308.886627 [25600/99840], accuracy 89.97% [23033/25600] training loss: 313.050446 [28160/99840], accuracy 89.99% [25341/28160] training loss: 313.130768 [30720/99840], accuracy 89.92% [27622/30720] training loss: 309.430573 [33280/99840], accuracy 89.92% [29926/33280] training loss: 313.621460 [35840/99840], accuracy 89.93% [32230/35840] training loss: 313.340729 [38400/99840], accuracy 89.91% [34524/38400] training loss: 306.415771 [40960/99840], accuracy 89.90% [36821/40960] training loss: 307.753326 [43520/99840], accuracy 89.87% [39112/43520] training loss: 306.321442 [46080/99840], accuracy 89.85% [41402/46080] training loss: 313.247772 [48640/99840], accuracy 89.81% [43683/48640] training loss: 309.275146 [51200/99840], accuracy 89.79% [45973/51200] training loss: 310.485779 [53760/99840], accuracy 89.84% [48298/53760] training loss: 306.935974 [56320/99840], accuracy 89.83% [50590/56320] training loss: 310.930603 [58880/99840], accuracy 89.82% [52887/58880] training loss: 311.584015 [61440/99840], accuracy 89.82% [55188/61440] training loss: 305.215942 [64000/99840], accuracy 89.82% [57487/64000] training loss: 304.891357 [66560/99840], accuracy 89.86% [59813/66560] training loss: 322.298920 [69120/99840], accuracy 89.88% [62127/69120] training loss: 313.445831 [71680/99840], accuracy 89.88% [64428/71680] training loss: 314.923309 [74240/99840], accuracy 89.86% [66713/74240] training loss: 309.672150 [76800/99840], accuracy 89.88% [69027/76800] training loss: 308.333832 [79360/99840], accuracy 89.87% [71324/79360] training loss: 309.889648 [81920/99840], accuracy 89.87% [73625/81920] training loss: 309.942078 [84480/99840], accuracy 89.90% [75947/84480] training loss: 305.291077 [87040/99840], accuracy 89.92% [78264/87040] training loss: 313.420807 [89600/99840], accuracy 89.91% [80558/89600] training loss: 310.927002 [92160/99840], accuracy 89.91% [82865/92160] training loss: 311.232758 [94720/99840], accuracy 89.93% [85177/94720] training loss: 310.002106 [97280/99840], accuracy 89.95% [87505/97280] training loss: 310.704010 [99840/99840], accuracy 89.95% [89805/99840] training avg loss: 2.429278 [99840/99840] training accuracy: 89.95% [89805/99840] validation avg loss: 2.441384 validation accuracy: 88.41% [22067/24960] saving model Epoch 19 training loss: 314.808563 [ 2560/99840], accuracy 90.00% [ 2304/ 2560] training loss: 311.230347 [ 5120/99840], accuracy 89.98% [ 4607/ 5120] training loss: 310.241425 [ 7680/99840], accuracy 90.07% [ 6917/ 7680] training loss: 315.923767 [10240/99840], accuracy 89.86% [ 9202/10240] training loss: 306.550232 [12800/99840], accuracy 89.76% [11489/12800] training loss: 310.573822 [15360/99840], accuracy 89.90% [13809/15360] training loss: 308.997589 [17920/99840], accuracy 89.97% [16122/17920] training loss: 310.087982 [20480/99840], accuracy 89.89% [18410/20480] training loss: 311.571594 [23040/99840], accuracy 90.00% [20735/23040] training loss: 311.957001 [25600/99840], accuracy 89.95% [23027/25600] training loss: 309.490265 [28160/99840], accuracy 89.94% [25327/28160] training loss: 311.926849 [30720/99840], accuracy 89.90% [27618/30720] training loss: 307.577301 [33280/99840], accuracy 90.01% [29956/33280] training loss: 311.453583 [35840/99840], accuracy 89.98% [32249/35840] training loss: 309.798065 [38400/99840], accuracy 89.98% [34551/38400] training loss: 315.066956 [40960/99840], accuracy 89.94% [36838/40960] training loss: 308.566681 [43520/99840], accuracy 90.00% [39169/43520] training loss: 315.033752 [46080/99840], accuracy 89.93% [41442/46080] training loss: 312.112427 [48640/99840], accuracy 89.97% [43760/48640] training loss: 310.921051 [51200/99840], accuracy 89.94% [46048/51200] training loss: 307.525299 [53760/99840], accuracy 89.91% [48334/53760] training loss: 305.425934 [56320/99840], accuracy 89.91% [50635/56320] training loss: 308.436798 [58880/99840], accuracy 89.96% [52966/58880] training loss: 304.678101 [61440/99840], accuracy 90.00% [55299/61440] training loss: 310.949402 [64000/99840], accuracy 90.02% [57614/64000] training loss: 307.441101 [66560/99840], accuracy 90.01% [59908/66560] training loss: 312.969330 [69120/99840], accuracy 90.02% [62222/69120] training loss: 311.528229 [71680/99840], accuracy 90.03% [64537/71680] training loss: 308.906555 [74240/99840], accuracy 90.02% [66828/74240] training loss: 308.772491 [76800/99840], accuracy 89.99% [69113/76800] training loss: 309.931763 [79360/99840], accuracy 89.98% [71405/79360] training loss: 310.932373 [81920/99840], accuracy 89.97% [73703/81920] training loss: 314.807251 [84480/99840], accuracy 89.97% [76003/84480] training loss: 313.774323 [87040/99840], accuracy 90.00% [78333/87040] training loss: 317.446014 [89600/99840], accuracy 90.01% [80645/89600] training loss: 304.810486 [92160/99840], accuracy 90.03% [82972/92160] training loss: 308.667053 [94720/99840], accuracy 90.05% [85296/94720] training loss: 308.537292 [97280/99840], accuracy 90.03% [87583/97280] training loss: 309.762177 [99840/99840], accuracy 90.05% [89907/99840] training avg loss: 2.427960 [99840/99840] training accuracy: 90.05% [89907/99840] validation avg loss: 2.441005 validation accuracy: 88.44% [22074/24960] saving model Epoch 20 training loss: 308.572510 [ 2560/99840], accuracy 90.47% [ 2316/ 2560] training loss: 309.615784 [ 5120/99840], accuracy 90.45% [ 4631/ 5120] training loss: 305.283325 [ 7680/99840], accuracy 90.18% [ 6926/ 7680] training loss: 306.587402 [10240/99840], accuracy 90.21% [ 9238/10240] training loss: 310.188263 [12800/99840], accuracy 90.31% [11560/12800] training loss: 307.396515 [15360/99840], accuracy 90.22% [13858/15360] training loss: 323.361237 [17920/99840], accuracy 90.40% [16200/17920] training loss: 309.960510 [20480/99840], accuracy 90.29% [18492/20480] training loss: 310.864136 [23040/99840], accuracy 90.34% [20814/23040] training loss: 306.184509 [25600/99840], accuracy 90.31% [23120/25600] training loss: 311.381622 [28160/99840], accuracy 90.27% [25419/28160] training loss: 314.436249 [30720/99840], accuracy 90.24% [27721/30720] training loss: 308.663910 [33280/99840], accuracy 90.23% [30029/33280] training loss: 310.763672 [35840/99840], accuracy 90.26% [32350/35840] training loss: 309.530884 [38400/99840], accuracy 90.26% [34660/38400] training loss: 310.351807 [40960/99840], accuracy 90.30% [36987/40960] training loss: 313.737915 [43520/99840], accuracy 90.32% [39307/43520] training loss: 310.282013 [46080/99840], accuracy 90.30% [41608/46080] training loss: 305.030457 [48640/99840], accuracy 90.32% [43930/48640] training loss: 307.003235 [51200/99840], accuracy 90.29% [46227/51200] training loss: 309.335175 [53760/99840], accuracy 90.24% [48514/53760] training loss: 309.296539 [56320/99840], accuracy 90.19% [50796/56320] training loss: 307.980591 [58880/99840], accuracy 90.20% [53112/58880] training loss: 311.322906 [61440/99840], accuracy 90.23% [55437/61440] training loss: 309.175629 [64000/99840], accuracy 90.27% [57773/64000] training loss: 314.411926 [66560/99840], accuracy 90.29% [60096/66560] training loss: 310.775574 [69120/99840], accuracy 90.28% [62402/69120] training loss: 311.722565 [71680/99840], accuracy 90.26% [64698/71680] training loss: 313.441925 [74240/99840], accuracy 90.27% [67020/74240] training loss: 307.269135 [76800/99840], accuracy 90.26% [69321/76800] training loss: 320.696045 [79360/99840], accuracy 90.24% [71614/79360] training loss: 312.360352 [81920/99840], accuracy 90.23% [73920/81920] training loss: 313.960663 [84480/99840], accuracy 90.24% [76238/84480] training loss: 307.615356 [87040/99840], accuracy 90.23% [78540/87040] training loss: 309.338806 [89600/99840], accuracy 90.23% [80848/89600] training loss: 309.591583 [92160/99840], accuracy 90.24% [83166/92160] training loss: 309.149261 [94720/99840], accuracy 90.24% [85472/94720] training loss: 305.804657 [97280/99840], accuracy 90.24% [87789/97280] training loss: 306.905090 [99840/99840], accuracy 90.25% [90104/99840] training avg loss: 2.426075 [99840/99840] training accuracy: 90.25% [90104/99840] validation avg loss: 2.440198 validation accuracy: 88.53% [22097/24960] saving model Epoch 21 training loss: 312.793060 [ 2560/99840], accuracy 90.20% [ 2309/ 2560] training loss: 309.705750 [ 5120/99840], accuracy 90.78% [ 4648/ 5120] training loss: 313.765259 [ 7680/99840], accuracy 90.74% [ 6969/ 7680] training loss: 310.203033 [10240/99840], accuracy 90.57% [ 9274/10240] training loss: 311.659729 [12800/99840], accuracy 90.49% [11583/12800] training loss: 311.397186 [15360/99840], accuracy 90.54% [13907/15360] training loss: 309.761658 [17920/99840], accuracy 90.39% [16198/17920] training loss: 315.148773 [20480/99840], accuracy 90.46% [18527/20480] training loss: 311.789093 [23040/99840], accuracy 90.48% [20847/23040] training loss: 309.776245 [25600/99840], accuracy 90.49% [23166/25600] training loss: 308.997070 [28160/99840], accuracy 90.53% [25494/28160] training loss: 307.671265 [30720/99840], accuracy 90.53% [27811/30720] training loss: 303.769196 [33280/99840], accuracy 90.54% [30132/33280] training loss: 306.217133 [35840/99840], accuracy 90.62% [32479/35840] training loss: 308.873627 [38400/99840], accuracy 90.61% [34796/38400] training loss: 307.589417 [40960/99840], accuracy 90.70% [37150/40960] training loss: 311.550842 [43520/99840], accuracy 90.73% [39484/43520] training loss: 316.753235 [46080/99840], accuracy 90.75% [41819/46080] training loss: 309.096344 [48640/99840], accuracy 90.76% [44148/48640] training loss: 310.240662 [51200/99840], accuracy 90.71% [46442/51200] training loss: 305.413055 [53760/99840], accuracy 90.70% [48758/53760] training loss: 311.965759 [56320/99840], accuracy 90.68% [51072/56320] training loss: 309.198303 [58880/99840], accuracy 90.62% [53359/58880] training loss: 309.773956 [61440/99840], accuracy 90.55% [55636/61440] training loss: 309.487488 [64000/99840], accuracy 90.52% [57933/64000] training loss: 305.175537 [66560/99840], accuracy 90.52% [60251/66560] training loss: 306.272217 [69120/99840], accuracy 90.52% [62565/69120] training loss: 313.157562 [71680/99840], accuracy 90.48% [64859/71680] training loss: 311.960907 [74240/99840], accuracy 90.49% [67179/74240] training loss: 308.853638 [76800/99840], accuracy 90.45% [69465/76800] training loss: 312.519196 [79360/99840], accuracy 90.45% [71780/79360] training loss: 309.375397 [81920/99840], accuracy 90.43% [74079/81920] training loss: 310.561066 [84480/99840], accuracy 90.43% [76399/84480] training loss: 317.577209 [87040/99840], accuracy 90.43% [78709/87040] training loss: 308.784943 [89600/99840], accuracy 90.43% [81025/89600] training loss: 311.847351 [92160/99840], accuracy 90.41% [83325/92160] training loss: 311.723907 [94720/99840], accuracy 90.39% [85620/94720] training loss: 314.846680 [97280/99840], accuracy 90.39% [87931/97280] training loss: 308.451874 [99840/99840], accuracy 90.38% [90236/99840] training avg loss: 2.424209 [99840/99840] training accuracy: 90.38% [90236/99840] validation avg loss: 2.440579 validation accuracy: 88.49% [22088/24960] saving model Epoch 22 training loss: 313.355774 [ 2560/99840], accuracy 90.31% [ 2312/ 2560] training loss: 312.692291 [ 5120/99840], accuracy 90.14% [ 4615/ 5120] training loss: 308.881409 [ 7680/99840], accuracy 90.21% [ 6928/ 7680] training loss: 306.775909 [10240/99840], accuracy 90.23% [ 9240/10240] training loss: 306.047424 [12800/99840], accuracy 90.32% [11561/12800] training loss: 311.504486 [15360/99840], accuracy 90.34% [13876/15360] training loss: 307.713196 [17920/99840], accuracy 90.32% [16186/17920] training loss: 312.955688 [20480/99840], accuracy 90.27% [18487/20480] training loss: 307.465759 [23040/99840], accuracy 90.27% [20798/23040] training loss: 309.839020 [25600/99840], accuracy 90.23% [23098/25600] training loss: 317.228394 [28160/99840], accuracy 90.26% [25418/28160] training loss: 308.026428 [30720/99840], accuracy 90.29% [27737/30720] training loss: 312.015442 [33280/99840], accuracy 90.31% [30054/33280] training loss: 306.711639 [35840/99840], accuracy 90.33% [32376/35840] training loss: 307.731995 [38400/99840], accuracy 90.42% [34723/38400] training loss: 306.368042 [40960/99840], accuracy 90.41% [37032/40960] training loss: 310.205963 [43520/99840], accuracy 90.43% [39355/43520] training loss: 305.255768 [46080/99840], accuracy 90.43% [41672/46080] training loss: 311.909180 [48640/99840], accuracy 90.43% [43987/48640] training loss: 305.629242 [51200/99840], accuracy 90.48% [46328/51200] training loss: 311.977570 [53760/99840], accuracy 90.52% [48661/53760] training loss: 311.002319 [56320/99840], accuracy 90.52% [50981/56320] training loss: 310.181183 [58880/99840], accuracy 90.51% [53291/58880] training loss: 308.847260 [61440/99840], accuracy 90.51% [55609/61440] training loss: 314.709717 [64000/99840], accuracy 90.51% [57925/64000] training loss: 311.790161 [66560/99840], accuracy 90.53% [60255/66560] training loss: 314.629700 [69120/99840], accuracy 90.51% [62560/69120] training loss: 312.989105 [71680/99840], accuracy 90.49% [64861/71680] training loss: 310.896667 [74240/99840], accuracy 90.46% [67160/74240] training loss: 306.812225 [76800/99840], accuracy 90.43% [69447/76800] training loss: 314.588531 [79360/99840], accuracy 90.41% [71749/79360] training loss: 309.681213 [81920/99840], accuracy 90.41% [74066/81920] training loss: 311.484314 [84480/99840], accuracy 90.42% [76383/84480] training loss: 312.973846 [87040/99840], accuracy 90.42% [78700/87040] training loss: 303.802887 [89600/99840], accuracy 90.44% [81034/89600] training loss: 313.875336 [92160/99840], accuracy 90.44% [83347/92160] training loss: 312.798828 [94720/99840], accuracy 90.45% [85670/94720] training loss: 308.435638 [97280/99840], accuracy 90.45% [87990/97280] training loss: 309.872131 [99840/99840], accuracy 90.45% [90307/99840] training avg loss: 2.423262 [99840/99840] training accuracy: 90.45% [90307/99840] validation avg loss: 2.439272 validation accuracy: 88.56% [22105/24960] saving model Epoch 23 training loss: 308.962433 [ 2560/99840], accuracy 90.16% [ 2308/ 2560] training loss: 310.013458 [ 5120/99840], accuracy 90.35% [ 4626/ 5120] training loss: 311.254608 [ 7680/99840], accuracy 90.49% [ 6950/ 7680] training loss: 309.261963 [10240/99840], accuracy 90.53% [ 9270/10240] training loss: 316.444214 [12800/99840], accuracy 90.63% [11601/12800] training loss: 308.804993 [15360/99840], accuracy 90.61% [13918/15360] training loss: 304.109894 [17920/99840], accuracy 90.63% [16241/17920] training loss: 311.435699 [20480/99840], accuracy 90.66% [18567/20480] training loss: 307.870941 [23040/99840], accuracy 90.67% [20891/23040] training loss: 307.814209 [25600/99840], accuracy 90.63% [23201/25600] training loss: 304.210938 [28160/99840], accuracy 90.69% [25537/28160] training loss: 313.911407 [30720/99840], accuracy 90.65% [27847/30720] training loss: 310.154114 [33280/99840], accuracy 90.60% [30152/33280] training loss: 312.349121 [35840/99840], accuracy 90.62% [32478/35840] training loss: 309.091919 [38400/99840], accuracy 90.61% [34793/38400] training loss: 309.694702 [40960/99840], accuracy 90.60% [37111/40960] training loss: 312.709930 [43520/99840], accuracy 90.60% [39427/43520] training loss: 308.537384 [46080/99840], accuracy 90.57% [41733/46080] training loss: 309.260254 [48640/99840], accuracy 90.55% [44045/48640] training loss: 312.850800 [51200/99840], accuracy 90.57% [46372/51200] training loss: 313.350739 [53760/99840], accuracy 90.55% [48681/53760] training loss: 305.470856 [56320/99840], accuracy 90.57% [51008/56320] training loss: 307.689575 [58880/99840], accuracy 90.60% [53346/58880] training loss: 313.204163 [61440/99840], accuracy 90.60% [55666/61440] training loss: 306.979492 [64000/99840], accuracy 90.61% [57990/64000] training loss: 311.064514 [66560/99840], accuracy 90.64% [60333/66560] training loss: 306.981873 [69120/99840], accuracy 90.62% [62635/69120] training loss: 310.732056 [71680/99840], accuracy 90.62% [64953/71680] training loss: 312.130615 [74240/99840], accuracy 90.60% [67260/74240] training loss: 307.084900 [76800/99840], accuracy 90.61% [69586/76800] training loss: 306.655182 [79360/99840], accuracy 90.62% [71913/79360] training loss: 312.091919 [81920/99840], accuracy 90.59% [74208/81920] training loss: 309.821899 [84480/99840], accuracy 90.58% [76519/84480] training loss: 307.383881 [87040/99840], accuracy 90.59% [78847/87040] training loss: 309.095428 [89600/99840], accuracy 90.56% [81143/89600] training loss: 313.908691 [92160/99840], accuracy 90.55% [83448/92160] training loss: 303.784454 [94720/99840], accuracy 90.57% [85789/94720] training loss: 312.626251 [97280/99840], accuracy 90.58% [88112/97280] training loss: 304.461884 [99840/99840], accuracy 90.60% [90454/99840] training avg loss: 2.421535 [99840/99840] training accuracy: 90.60% [90454/99840] validation avg loss: 2.438303 validation accuracy: 88.62% [22120/24960] saving model Epoch 24 training loss: 312.267731 [ 2560/99840], accuracy 90.39% [ 2314/ 2560] training loss: 311.564697 [ 5120/99840], accuracy 90.53% [ 4635/ 5120] training loss: 311.656769 [ 7680/99840], accuracy 90.43% [ 6945/ 7680] training loss: 306.470856 [10240/99840], accuracy 90.80% [ 9298/10240] training loss: 311.120636 [12800/99840], accuracy 90.96% [11643/12800] training loss: 314.348267 [15360/99840], accuracy 90.98% [13974/15360] training loss: 308.344635 [17920/99840], accuracy 90.97% [16302/17920] training loss: 305.913422 [20480/99840], accuracy 91.04% [18645/20480] training loss: 311.619507 [23040/99840], accuracy 91.04% [20976/23040] training loss: 307.811218 [25600/99840], accuracy 91.02% [23301/25600] training loss: 305.174286 [28160/99840], accuracy 91.01% [25628/28160] training loss: 308.226593 [30720/99840], accuracy 90.99% [27951/30720] training loss: 309.401672 [33280/99840], accuracy 90.93% [30262/33280] training loss: 307.931366 [35840/99840], accuracy 90.88% [32573/35840] training loss: 312.444153 [38400/99840], accuracy 90.85% [34888/38400] training loss: 305.642731 [40960/99840], accuracy 90.81% [37197/40960] training loss: 306.361908 [43520/99840], accuracy 90.82% [39524/43520] training loss: 308.427368 [46080/99840], accuracy 90.81% [41847/46080] training loss: 312.404663 [48640/99840], accuracy 90.77% [44150/48640] training loss: 306.259338 [51200/99840], accuracy 90.79% [46483/51200] training loss: 305.117432 [53760/99840], accuracy 90.78% [48806/53760] training loss: 307.156036 [56320/99840], accuracy 90.79% [51131/56320] training loss: 303.800018 [58880/99840], accuracy 90.76% [53437/58880] training loss: 310.974121 [61440/99840], accuracy 90.76% [55764/61440] training loss: 315.093964 [64000/99840], accuracy 90.77% [58094/64000] training loss: 310.815247 [66560/99840], accuracy 90.79% [60430/66560] training loss: 315.253601 [69120/99840], accuracy 90.80% [62758/69120] training loss: 310.727875 [71680/99840], accuracy 90.81% [65093/71680] training loss: 311.852356 [74240/99840], accuracy 90.82% [67423/74240] training loss: 308.586670 [76800/99840], accuracy 90.83% [69755/76800] training loss: 306.816162 [79360/99840], accuracy 90.86% [72107/79360] training loss: 309.778656 [81920/99840], accuracy 90.89% [74460/81920] training loss: 314.081177 [84480/99840], accuracy 90.89% [76781/84480] training loss: 309.663391 [87040/99840], accuracy 90.90% [79120/87040] training loss: 309.581238 [89600/99840], accuracy 90.93% [81472/89600] training loss: 309.807953 [92160/99840], accuracy 90.93% [83804/92160] training loss: 306.294128 [94720/99840], accuracy 90.98% [86174/94720] training loss: 309.431549 [97280/99840], accuracy 90.99% [88511/97280] training loss: 309.960968 [99840/99840], accuracy 91.01% [90866/99840] training avg loss: 2.418777 [99840/99840] training accuracy: 91.01% [90866/99840] validation avg loss: 2.427128 validation accuracy: 89.95% [22451/24960] saving model Epoch 25 training loss: 308.651733 [ 2560/99840], accuracy 91.48% [ 2342/ 2560] training loss: 315.234222 [ 5120/99840], accuracy 92.05% [ 4713/ 5120] training loss: 304.432648 [ 7680/99840], accuracy 92.15% [ 7077/ 7680] training loss: 308.566956 [10240/99840], accuracy 92.13% [ 9434/10240] training loss: 310.991516 [12800/99840], accuracy 92.04% [11781/12800] training loss: 316.378082 [15360/99840], accuracy 92.12% [14150/15360] training loss: 308.101440 [17920/99840], accuracy 92.21% [16524/17920] training loss: 308.437195 [20480/99840], accuracy 92.13% [18869/20480] training loss: 305.541962 [23040/99840], accuracy 92.15% [21231/23040] training loss: 305.494965 [25600/99840], accuracy 92.10% [23578/25600] training loss: 307.769348 [28160/99840], accuracy 92.15% [25950/28160] training loss: 304.557556 [30720/99840], accuracy 92.19% [28322/30720] training loss: 310.339447 [33280/99840], accuracy 92.27% [30707/33280] training loss: 303.135529 [35840/99840], accuracy 92.32% [33088/35840] training loss: 307.241241 [38400/99840], accuracy 92.34% [35458/38400] training loss: 307.275085 [40960/99840], accuracy 92.38% [37838/40960] training loss: 310.212189 [43520/99840], accuracy 92.37% [40199/43520] training loss: 307.590149 [46080/99840], accuracy 92.34% [42552/46080] training loss: 305.702972 [48640/99840], accuracy 92.34% [44914/48640] training loss: 307.098389 [51200/99840], accuracy 92.38% [47301/51200] training loss: 309.790710 [53760/99840], accuracy 92.42% [49683/53760] training loss: 309.572235 [56320/99840], accuracy 92.46% [52073/56320] training loss: 301.449097 [58880/99840], accuracy 92.47% [54448/58880] training loss: 307.537018 [61440/99840], accuracy 92.48% [56822/61440] training loss: 307.616669 [64000/99840], accuracy 92.52% [59214/64000] training loss: 305.236633 [66560/99840], accuracy 92.53% [61590/66560] training loss: 310.875916 [69120/99840], accuracy 92.54% [63962/69120] training loss: 304.485748 [71680/99840], accuracy 92.51% [66310/71680] training loss: 308.002960 [74240/99840], accuracy 92.53% [68694/74240] training loss: 306.388428 [76800/99840], accuracy 92.51% [71048/76800] training loss: 309.240845 [79360/99840], accuracy 92.50% [73407/79360] training loss: 309.569916 [81920/99840], accuracy 92.51% [75783/81920] training loss: 303.146149 [84480/99840], accuracy 92.49% [78138/84480] training loss: 311.118164 [87040/99840], accuracy 92.47% [80485/87040] training loss: 308.589783 [89600/99840], accuracy 92.46% [82843/89600] training loss: 306.216339 [92160/99840], accuracy 92.51% [85257/92160] training loss: 306.079071 [94720/99840], accuracy 92.50% [87619/94720] training loss: 306.050079 [97280/99840], accuracy 92.52% [89999/97280] training loss: 304.046326 [99840/99840], accuracy 92.54% [92388/99840] training avg loss: 2.405737 [99840/99840] training accuracy: 92.54% [92388/99840] validation avg loss: 2.415318 validation accuracy: 91.17% [22756/24960] saving model Epoch 26 training loss: 307.002502 [ 2560/99840], accuracy 93.20% [ 2386/ 2560] training loss: 310.051971 [ 5120/99840], accuracy 93.42% [ 4783/ 5120] training loss: 306.366150 [ 7680/99840], accuracy 93.41% [ 7174/ 7680] training loss: 312.956787 [10240/99840], accuracy 93.19% [ 9543/10240] training loss: 314.174194 [12800/99840], accuracy 93.12% [11919/12800] training loss: 309.882294 [15360/99840], accuracy 92.88% [14267/15360] training loss: 309.394806 [17920/99840], accuracy 92.85% [16638/17920] training loss: 307.298615 [20480/99840], accuracy 92.80% [19005/20480] training loss: 304.325043 [23040/99840], accuracy 92.85% [21392/23040] training loss: 309.191254 [25600/99840], accuracy 92.95% [23794/25600] training loss: 304.864685 [28160/99840], accuracy 92.98% [26182/28160] training loss: 306.272522 [30720/99840], accuracy 92.98% [28564/30720] training loss: 308.888580 [33280/99840], accuracy 92.94% [30932/33280] training loss: 307.300781 [35840/99840], accuracy 92.89% [33293/35840] training loss: 308.814270 [38400/99840], accuracy 92.95% [35694/38400] training loss: 306.869354 [40960/99840], accuracy 92.94% [38067/40960] training loss: 307.283173 [43520/99840], accuracy 92.93% [40443/43520] training loss: 308.977386 [46080/99840], accuracy 92.93% [42824/46080] training loss: 306.829224 [48640/99840], accuracy 92.96% [45214/48640] training loss: 304.656097 [51200/99840], accuracy 92.97% [47599/51200] training loss: 310.145782 [53760/99840], accuracy 92.99% [49994/53760] training loss: 308.768616 [56320/99840], accuracy 92.98% [52366/56320] training loss: 306.125763 [58880/99840], accuracy 93.00% [54759/58880] training loss: 306.356750 [61440/99840], accuracy 93.03% [57155/61440] training loss: 308.212036 [64000/99840], accuracy 93.08% [59574/64000] training loss: 310.240021 [66560/99840], accuracy 93.07% [61949/66560] training loss: 303.615814 [69120/99840], accuracy 93.06% [64322/69120] training loss: 309.214355 [71680/99840], accuracy 93.09% [66728/71680] training loss: 304.827820 [74240/99840], accuracy 93.09% [69110/74240] training loss: 305.246124 [76800/99840], accuracy 93.07% [71479/76800] training loss: 306.523163 [79360/99840], accuracy 93.08% [73870/79360] training loss: 306.429596 [81920/99840], accuracy 93.10% [76268/81920] training loss: 306.667145 [84480/99840], accuracy 93.10% [78648/84480] training loss: 307.041077 [87040/99840], accuracy 93.14% [81065/87040] training loss: 301.591888 [89600/99840], accuracy 93.16% [83469/89600] training loss: 309.654877 [92160/99840], accuracy 93.15% [85851/92160] training loss: 305.224152 [94720/99840], accuracy 93.15% [88228/94720] training loss: 306.840210 [97280/99840], accuracy 93.14% [90611/97280] training loss: 303.342102 [99840/99840], accuracy 93.16% [93011/99840] training avg loss: 2.398398 [99840/99840] training accuracy: 93.16% [93011/99840] validation avg loss: 2.414218 validation accuracy: 91.17% [22755/24960] saving model Epoch 27 training loss: 308.396790 [ 2560/99840], accuracy 93.95% [ 2405/ 2560] training loss: 308.779175 [ 5120/99840], accuracy 93.59% [ 4792/ 5120] training loss: 305.674957 [ 7680/99840], accuracy 93.31% [ 7166/ 7680] training loss: 302.688751 [10240/99840], accuracy 93.54% [ 9578/10240] training loss: 309.843109 [12800/99840], accuracy 93.48% [11965/12800] training loss: 304.967163 [15360/99840], accuracy 93.33% [14336/15360] training loss: 308.432465 [17920/99840], accuracy 93.41% [16739/17920] training loss: 312.107269 [20480/99840], accuracy 93.43% [19134/20480] training loss: 306.911713 [23040/99840], accuracy 93.39% [21517/23040] training loss: 304.168457 [25600/99840], accuracy 93.46% [23927/25600] training loss: 310.124329 [28160/99840], accuracy 93.45% [26315/28160] training loss: 307.557953 [30720/99840], accuracy 93.45% [28707/30720] training loss: 305.799194 [33280/99840], accuracy 93.47% [31107/33280] training loss: 303.616974 [35840/99840], accuracy 93.45% [33494/35840] training loss: 304.912476 [38400/99840], accuracy 93.40% [35867/38400] training loss: 308.345398 [40960/99840], accuracy 93.45% [38276/40960] training loss: 301.784027 [43520/99840], accuracy 93.46% [40674/43520] training loss: 307.919983 [46080/99840], accuracy 93.42% [43047/46080] training loss: 305.897308 [48640/99840], accuracy 93.41% [45433/48640] training loss: 303.216797 [51200/99840], accuracy 93.45% [47847/51200] training loss: 308.406982 [53760/99840], accuracy 93.48% [50256/53760] training loss: 303.478729 [56320/99840], accuracy 93.51% [52666/56320] training loss: 303.652740 [58880/99840], accuracy 93.49% [55049/58880] training loss: 306.142517 [61440/99840], accuracy 93.52% [57459/61440] training loss: 305.353729 [64000/99840], accuracy 93.50% [59843/64000] training loss: 309.558197 [66560/99840], accuracy 93.49% [62224/66560] training loss: 306.580780 [69120/99840], accuracy 93.49% [64623/69120] training loss: 307.973297 [71680/99840], accuracy 93.47% [67000/71680] training loss: 305.949402 [74240/99840], accuracy 93.46% [69384/74240] training loss: 305.829224 [76800/99840], accuracy 93.47% [71782/76800] training loss: 305.612671 [79360/99840], accuracy 93.44% [74156/79360] training loss: 309.399231 [81920/99840], accuracy 93.43% [76536/81920] training loss: 305.019958 [84480/99840], accuracy 93.41% [78913/84480] training loss: 306.941772 [87040/99840], accuracy 93.41% [81305/87040] training loss: 304.592072 [89600/99840], accuracy 93.42% [83701/89600] training loss: 308.753357 [92160/99840], accuracy 93.40% [86079/92160] training loss: 309.320953 [94720/99840], accuracy 93.41% [88475/94720] training loss: 305.772858 [97280/99840], accuracy 93.41% [90869/97280] training loss: 304.889191 [99840/99840], accuracy 93.42% [93271/99840] training avg loss: 2.394870 [99840/99840] training accuracy: 93.42% [93271/99840] validation avg loss: 2.411556 validation accuracy: 91.44% [22823/24960] saving model Epoch 28 training loss: 306.081909 [ 2560/99840], accuracy 93.01% [ 2381/ 2560] training loss: 313.601166 [ 5120/99840], accuracy 93.42% [ 4783/ 5120] training loss: 309.202393 [ 7680/99840], accuracy 93.35% [ 7169/ 7680] training loss: 307.206604 [10240/99840], accuracy 93.18% [ 9542/10240] training loss: 304.646362 [12800/99840], accuracy 93.35% [11949/12800] training loss: 305.021393 [15360/99840], accuracy 93.35% [14339/15360] training loss: 302.412323 [17920/99840], accuracy 93.44% [16744/17920] training loss: 305.675171 [20480/99840], accuracy 93.33% [19114/20480] training loss: 306.259399 [23040/99840], accuracy 93.47% [21535/23040] training loss: 305.068176 [25600/99840], accuracy 93.49% [23933/25600] training loss: 308.717560 [28160/99840], accuracy 93.43% [26311/28160] training loss: 310.900543 [30720/99840], accuracy 93.45% [28708/30720] training loss: 309.932159 [33280/99840], accuracy 93.43% [31093/33280] training loss: 307.716339 [35840/99840], accuracy 93.45% [33494/35840] training loss: 304.500031 [38400/99840], accuracy 93.43% [35879/38400] training loss: 302.835236 [40960/99840], accuracy 93.45% [38277/40960] training loss: 305.965454 [43520/99840], accuracy 93.49% [40689/43520] training loss: 307.760315 [46080/99840], accuracy 93.44% [43057/46080] training loss: 304.627991 [48640/99840], accuracy 93.48% [45471/48640] training loss: 311.684143 [51200/99840], accuracy 93.51% [47877/51200] training loss: 308.515137 [53760/99840], accuracy 93.53% [50284/53760] training loss: 305.453522 [56320/99840], accuracy 93.53% [52677/56320] training loss: 306.909973 [58880/99840], accuracy 93.54% [55074/58880] training loss: 316.918030 [61440/99840], accuracy 93.49% [57441/61440] training loss: 308.427612 [64000/99840], accuracy 93.47% [59823/64000] training loss: 302.474579 [66560/99840], accuracy 93.50% [62236/66560] training loss: 304.907898 [69120/99840], accuracy 93.52% [64643/69120] training loss: 306.104126 [71680/99840], accuracy 93.53% [67040/71680] training loss: 302.576355 [74240/99840], accuracy 93.56% [69457/74240] training loss: 303.845642 [76800/99840], accuracy 93.58% [71866/76800] training loss: 300.692627 [79360/99840], accuracy 93.60% [74277/79360] training loss: 304.724823 [81920/99840], accuracy 93.59% [76668/81920] training loss: 308.327087 [84480/99840], accuracy 93.58% [79056/84480] training loss: 308.086792 [87040/99840], accuracy 93.60% [81467/87040] training loss: 307.172882 [89600/99840], accuracy 93.59% [83859/89600] training loss: 307.007599 [92160/99840], accuracy 93.58% [86245/92160] training loss: 305.552856 [94720/99840], accuracy 93.58% [88640/94720] training loss: 303.597290 [97280/99840], accuracy 93.58% [91034/97280] training loss: 300.373657 [99840/99840], accuracy 93.58% [93430/99840] training avg loss: 2.393016 [99840/99840] training accuracy: 93.58% [93430/99840] validation avg loss: 2.411274 validation accuracy: 91.43% [22822/24960] saving model Epoch 29 training loss: 310.637115 [ 2560/99840], accuracy 93.75% [ 2400/ 2560] training loss: 304.245453 [ 5120/99840], accuracy 93.61% [ 4793/ 5120] training loss: 310.979950 [ 7680/99840], accuracy 93.54% [ 7184/ 7680] training loss: 307.592957 [10240/99840], accuracy 93.64% [ 9589/10240] training loss: 305.438690 [12800/99840], accuracy 93.52% [11971/12800] training loss: 306.320343 [15360/99840], accuracy 93.50% [14361/15360] training loss: 303.847107 [17920/99840], accuracy 93.63% [16779/17920] training loss: 308.969330 [20480/99840], accuracy 93.71% [19192/20480] training loss: 301.370941 [23040/99840], accuracy 93.76% [21603/23040] training loss: 304.699615 [25600/99840], accuracy 93.74% [23998/25600] training loss: 306.303650 [28160/99840], accuracy 93.76% [26404/28160] training loss: 308.740723 [30720/99840], accuracy 93.78% [28809/30720] training loss: 306.725800 [33280/99840], accuracy 93.77% [31206/33280] training loss: 303.018951 [35840/99840], accuracy 93.77% [33608/35840] training loss: 306.288452 [38400/99840], accuracy 93.77% [36008/38400] training loss: 304.770416 [40960/99840], accuracy 93.74% [38396/40960] training loss: 305.838989 [43520/99840], accuracy 93.77% [40809/43520] training loss: 310.654602 [46080/99840], accuracy 93.77% [43208/46080] training loss: 302.706696 [48640/99840], accuracy 93.80% [45623/48640] training loss: 298.933594 [51200/99840], accuracy 93.82% [48035/51200] training loss: 306.563019 [53760/99840], accuracy 93.81% [50434/53760] training loss: 303.880798 [56320/99840], accuracy 93.80% [52829/56320] training loss: 303.171722 [58880/99840], accuracy 93.80% [55229/58880] training loss: 306.732971 [61440/99840], accuracy 93.78% [57616/61440] training loss: 301.134918 [64000/99840], accuracy 93.75% [60003/64000] training loss: 303.694672 [66560/99840], accuracy 93.76% [62407/66560] training loss: 303.404541 [69120/99840], accuracy 93.77% [64816/69120] training loss: 307.143005 [71680/99840], accuracy 93.78% [67225/71680] training loss: 311.825439 [74240/99840], accuracy 93.76% [69604/74240] training loss: 304.570801 [76800/99840], accuracy 93.74% [71996/76800] training loss: 304.671082 [79360/99840], accuracy 93.75% [74401/79360] training loss: 307.654236 [81920/99840], accuracy 93.77% [76815/81920] training loss: 305.859100 [84480/99840], accuracy 93.75% [79202/84480] training loss: 306.550751 [87040/99840], accuracy 93.74% [81591/87040] training loss: 308.158264 [89600/99840], accuracy 93.73% [83985/89600] training loss: 314.286224 [92160/99840], accuracy 93.73% [86382/92160] training loss: 302.409637 [94720/99840], accuracy 93.74% [88795/94720] training loss: 300.633362 [97280/99840], accuracy 93.74% [91193/97280] training loss: 309.143860 [99840/99840], accuracy 93.72% [93575/99840] training avg loss: 2.391279 [99840/99840] training accuracy: 93.72% [93575/99840] validation avg loss: 2.410733 validation accuracy: 91.47% [22832/24960] saving model
**** Running model on the testing dataset **** Test total loss: 50171.11458516121 Test avg loss: 2.412072816594289 Test accuracy: 91.37% [19005/20800]
You can see above that this model ends with ~94% accuracy on the test set and ~91.5% accuracy on the validation set. From the examples above, it performs decently well on a lot of different examples. The training/validation loss curves are pretty close to aligned. It gets ~91% on test accuracy and performs decently well over all the characters. There is likely some room for improvement with the model, but overall it seems to generalize well. Compared to the first model I trained, this one has a slightly higher test accuracy. You can see below that on the handwritten examples it gets the "go utes" example correct but does slightly worse on the other two handwritten examples. It misses about 4-5 characters on those. For example in the "ovaltine" image below it predicts an 'i' as a 'j' and an 'i' as a 't'. in On the font that looks more like handwriting it correctly predicts 164/183 characters, which is lower than the pretrained model and the model I trained above. On the other typed fonts it performs similar to the pretrained model but slightly worse, and so it doesn't do a good job at classifying those. Probably the way to improve performance on other fonts would be to have typed characters in the dataset. I believe the dataset is mainly handwritten characters so that would definitely improve performance. Overall, this model performs similar to the first model I trained and the pretrained model, but it is the worst out the three models. The model I trained above has better performance.
out = image_transcription(test_images[0], test_labels[0], test_labels_spaces[0], TEST_PATH, test_filenames[0], model)
Actual label: BESURETODRINKYOUROVALTINE Predicted label without spaces: BESURETODRJNKYOUROYALTTNE Accuracy: (22/25) Actual label: BE SURE TO DRINK YOUR OVALTINE Predicted label with spaces: BE SURE TO DRJNK YOUR OYALTTNE Accuracy: (27/30)
out = image_transcription(test_images[1], test_labels[1], test_labels_spaces[1], TEST_PATH, test_filenames[1], model)
Actual label: GOUTES Predicted label without spaces: GOUTES Accuracy: (6/6) Actual label: GO UTES Predicted label with spaces: GO UTES Accuracy: (7/7)
out = image_transcription(test_images[2], test_labels[2], test_labels_spaces[2], TEST_PATH, test_filenames[2], model)
Actual label: DREAMBIGFORDREAMSIGNITEPOSSIBILITYCHASEYOURPASSIONSWITHUNWAVERINGDETERMINATIONBELIEVEINYOURSELFFORYOUARECAPABLEOFEXTRAORDINARYTHINGSREMEMBERTHATTHEJOURNEYISASIMPORTANTASTHEDESTINATION Predicted label without spaces: DREAMBLGFORDREAMSLGNLTEPOSSLBLLLTYCHASEYOURPASSLONSWLTHUNWAVERLNGDETERMLNATLONBELLEVELNYOURSELFFORYOUARECAPABLEOFEXTRAORDLNARYTHLNGSREMEMBERTHATTHEJOURNEYLSASLMPORTANTASTHEDESTLNATLON Accuracy: (164/183) Actual label: DREAM BIG FOR DREAMS IGNITE POSSIBILITY CHASE YOUR PASSIONS WITH UNWAVERING DETERMINATION BELIEVE IN YOURSELF FOR YOU ARE CAPABLE OF EXTRAORDINARY THINGS REMEMBER THAT THE JOURNEY IS AS IMPORTANT AS THE DESTINATION Predicted label with spaces: DREAM BLG FOR DREAMS LGNLTE POSSLBLLLTY CHASE YOUR PASSLONS WLTH UNWAVERLNG DETERMLNATLON BELLEVE LN YOURSELF FOR YOU ARE CAPABLE OF EXTRAORDLNARY THLNGS REMEMBER THAT THE JOURNEY LS AS LMPORTANT AS THE DESTLNATLON Accuracy: (195/214)
out = image_transcription(test_images[3], test_labels[3], test_labels_spaces[3], TEST_PATH, test_filenames[3], model)
Actual label: EVERYMOMENTISAFRESHBEGINNINGANEWSTARTANEWPATH Predicted label without spaces: EVERYMDMENTTSAFRESHBEGTNNTNGANEWSTARTANEWPATH Accuracy: (41/45) Actual label: EVERY MOMENT IS A FRESH BEGINNING A NEW START A NEW PATH Predicted label with spaces: EVERY MDMENT TS A FRESH BEGTNNTNG A NEW START A NEW PATH Accuracy: (52/56)
out = image_transcription(test_images[4], test_labels[4], test_labels_spaces[4], TEST_PATH, test_filenames[4], model)
Actual label: LOWCARBOHYDRATEDIETSHAVEBECOMEINCREASINGLYPOPULARSUPPORTERSCLAIMTHEYARENOTABLYMOREEFFECTIVETHANOTHERDIETSFORWEIGHTLOSSANDPROVIDEOTHERHEALTHBENEFITSSUCHASLOWERBLOODPRESSUREANDIMPROVEDCHOLESTEROLLEVELSHOWEVERSOMEDOCTORSBELIEVETHESEDIETSCARRYPOTENTIALLONGTERMHEALTHRISKSAREVIEWOFTHEAVAILABLERESEARCHLITERATUREINDICATESTHATLOWCARBOHYDRATEDIETSAREHIGHLYEFFECTIVEFORSHORTTERMWEIGHTLOSSBUTTHATTHEIRLONGTERMEFFECTIVENESSISNOTSIGNIFICANTLYGREATERTHANOTHERCOMMONDIETPLANSTHEIRLONGTERMEFFECTSONCHOLESTEROLLEVELSANDBLOODPRESSUREAREUNKNOWNRESEARCHLITERATURESUGGESTSSOMEPOTENTIALFORNEGATIVEHEALTHOUTCOMESASSOCIATEDWITHINCREASEDCONSUMPTIONOFSATURATEDFATTHISCONCLUSIONPOINTSTOTHEIMPORTANCEOFFOLLOWINGABALANCEDMODERATEDIETAPPROPRIATEFORTHEINDIVIDUALASWELLASTHENEEDFORFURTHERRESEARCH Predicted label without spaces: LOWCDRBOHXURXELLRDJBTSHDVEBFCRJOMJFLXCRBASJXGUXPOPUBDRSUPPORTBRSHCUAJMTRHKTXARBXOGTABLXMORBFFFBCTJVBJHAXCJRJRHJFRDLJFXSFORWBJGHTJCJSSDXUPROVLUBORRHBRHBDJTHBBXFTJYTSSUTNXJJHCHASLJOWJFRBLJCJODPRKSSURBDXDLMPROVKUCYHOJJBSTBROUJTJBVJFJJSUHOWBVBTPSHUNQBDOJCYTORSBBBJBVTBWFJFSTJXTJUJBGSNCDRRTJPOXBNTLDLLOXGTTBRWHFALJTHRLSKSAREVJTBVLOFXHBDVDJLJABLJFRKTSHBDRCHLJXFRDTURBJXULCYXGRTBSTHDTLNWCDRBOHXURXXBDJFTTTJSDRJFHLGHLXKFFBCTJVBFORSTJORTTERMWTTJLGHTGOSSBLJYTGHATXHJGGRJJOYRRLGRBRMBFFJFCTXVTTNFSSLSXOYTSLGXLFLCDXTLXRJJLGRBATBRTHDXOTHBRJCOMMOXULBRRPLDXTSXHEXRLOXCRXFNKMTHJJBFFBCXSOXJCTJOLJJFSTEROLLKVFLSAXUBJJOOUPRBSSURERTABUXKNOWXRBSJFDRCHULTFRAGURFSUTGRTKRJSHXSLSOMEPORREXXLDBFORXEYGAJLVBHBDJLTHOUTCOMBSDSYHSOCJLATBUWLJTHJXCREDSBUJCOXSUMPXLOXOFSATLJRDTJFDFDTTHLSCYOXCJJUSLOXPOJNTSLTOGTHBJMPORTAXCJFOTNFOLJLOVLLNCABDJDXCBUMODRBRDTBDLFTDPPROPRJAXBFORXHTBFXJJLVLUUTJJJALASWJFLLDSUTHFUNBJFDFORFURRRHBRRJFSHJFARCH Accuracy: (37/765) Actual label: LOW CARBOHYDRATE DIETS HAVE BECOME INCREASINGLY POPULAR SUPPORTERS CLAIM THEY ARE NOTABLY MORE EFFECTIVE THAN OTHER DIETS FOR WEIGHTLOSS AND PROVIDE OTHER HEALTH BENEFITS SUCH AS LOWER BLOOD PRESSURE AND IMPROVED CHOLESTEROL LEVELS HOWEVER SOME DOCTORS BELIEVE THESE DIETS CARRY POTENTIAL LONG TERM HEALTH RISKS ARE VIEW OF THE AVAILABLE RESEARCH LITERATURE INDICATES THAT LOW CARBOHYDRATE DIETS ARE HIGHLY EFFECTIVE FOR SHORT TERM WEIGHTLOSS BUT THAT THEIR LONG TERM EFFECTIVENESS IS NOT SIGNIFICANTLY GREATER THAN OTHER COMMON DIET PLANS THEIR LONG TERM EFFECTS ON CHOLESTEROL LEVELS AND BLOOD PRESSURE ARE UNKNOWN RESEARCH LITERATURE SUGGESTS SOME POTENTIAL FOR NEGATIVE HEALTH OUTCOMES ASSOCIATED WITH INCREASED CONSUMPTION OF SATURATED FAT THIS CONCLUSION POINTS TO THE IMPORTANCE OF FOLLOWING A BALANCED MODERATE DIET APPROPRIATE FOR THE INDIVIDUAL AS WELL AS THE NEED FOR FURTHER RESEARCH Predicted label with spaces: LO W C DRBO HXUR XE L LR D J BTS H DVE BFCRJO M JF LXC RBASJXGUX POPUBDR SUPPORTBRSH CUAJM TRHK TX ARB X OGTABLX M ORB FFFBCTJVB JH AX CJR J RH JFR DLJFXS FOR W BJG HT JCJSS DX U PR OVLUB O RR HBR HBDJT H BBXFTJYTS SUT N X J J H C H AS LJO W JFR BLJCJO D PRKSSU RB DX D LM PR OVKU CYH OJJBSTBROU J TJBV JFJJSU H O W BVBTP SH UNQB D O JC YTORS BBBJBV TB WFJFS T JXTJ UJBGS NC DRR TJ POXBNTLDL LO XG T TBR W HF ALJTH RLSKS ARE VJTB VL OF XHB DVDJLJABLJF RK TSH BDRC H LJXFRDTU RB JX ULCYXGRTBS TH DT LN W C DRBO HXURXXB DJFTT T J S DR JF HLG HLX KFFBCTJVB FOR STJO RT TER M WTTJLG HT GOSS BLJYTGH AT XH JGGR JJO Y RR L G RBR M BFF JFCTXVTTNFSS LS X OYTSLG XLFLC DXTLX R J J L G RBATBR TH DX OTHBR JC O M M O X ULBRR PLDX TS XHEXR LO XC RXFNK M T H J J BFFBCXS O X JCTJOLJJFSTER OL LKVFLS AX U BJJO O U PRBSSU RE R T A B U XK N O W X RBS JF DRC H ULTFRAGU RF SUTGRTKRJ SH XSL SO ME PO RR EXXLDB FO R XE YG AJLVB HBDJLTH OUTC O MBS DS Y H SOCJLATBU WLJTH JXC REDSBU JC O XSU MPXLO X OF SATLJRDT JF D FDT THLS CYO XCJJUSLO X P OJNTSL TO GTHB JMPORTAXC JF OTN FOLJLO VL LNC A BDJDXCBU M O D RBRDTB DLFT DPPR OPRJAXB FO R XH TB FXJJLVLUUT J J J AL AS W JFLL DSU THFU NB JF D FOR FU RRR HBR R JFSH JF ARC H Accuracy: (89/895)
out = image_transcription(test_images[5], test_labels[5], test_labels_spaces[5], TEST_PATH, test_filenames[5], model)
Actual label: YOUWILLFACEMANYDEFEATSINLIFEBUTNEVERLETYOURSELFBEDEFEATED Predicted label without spaces: XOUWJUJFACBMANXDBFBATSQNYLFBBUTNBVBRJBRYOURSBJFBBDBFBATBD Accuracy: (34/57) Actual label: YOU WILL FACE MANY DEFEATS IN LIFE BUT NEVER LET YOURSELF BE DEFEATED Predicted label with spaces: XOU WJUJ FACB MANX DBFBATS QN YLFB BUT NBVBR JBR YOURSBJF BB DBFBATBD Accuracy: (46/69)
out = image_transcription(test_images[6], test_labels[6], test_labels_spaces[6], TEST_PATH, test_filenames[6], model)
Actual label: ABSTRACTAUDIOPATTERNRECOGNITIONISANIMPORTANTRESEARCHTOPICINTHEMACHINELEARNINGAREAANDINCLUDESSEVERALTASKSSUCHASAUDIOTAGGINGACOUSTICSCENECLASSIFICATIONANDSOUNDEVENTDETECTIONRECENTLYNEURALNETWORKSHAVEBEENAPPLIEDTOSOLVEAUDIOPATTERNRECOGNITIONPROBLEMSHOWEVERPREVIOUSSYSTEMSFOCUSONSMALLDATASETSWHICHLIMITSTHEPERFORMANCEOFAUDIOPATTERNRECOGNITIONSYSTEMS Predicted label without spaces: ABSTRACTAUDLOPDTTERXRBCOGXJTJOXLSAXLMPORTDXTRBSFRCHTOPLCJXTHEMDYJDCHLXFDTDRXLXGDRTDANDLXCLJUDBSSBVBRALTARSKSSUCHASAUDLOTDTGGLXGACOUSGLCSCTJBXBCBDSSLFLCDTLOXDXDSOUXDEVTJFXTDTBCTJOXRBCBXTLXXBURADXBRRWORKSHAVBBBBXAPPLQBDTOSOLVBAUDJOPDTTJFRXRFCOTGXLTJOXPROBLMPRTJBSHOWEVJFRJFVLOUSSXSTBMSFOCUSOXSMAULDATDSTJFTSNHLCHLLMLRFSTHBPFRFORMDXCJTOFAUDLOPATTBRXRBCOGXQJLOXSXSHTBMS Accuracy: (48/345) Actual label: ABSTRACT AUDIO PATTERN RECOGNITION IS AN IMPORTANT RESEARCH TOPIC IN THE MACHINE LEARNING AREA AND INCLUDES SEVERAL TASKS SUCH AS AUDIO TAGGING ACOUSTIC SCENE CLASSIFICATION AND SOUND EVENT DETECTION RECENTLY NEURAL NETWORKS HAVE BEEN APPLIED TO SOLVE AUDIO PATTERN RECOGNITION PROBLEMS HOWEVER PREVIOUS SYSTEMS FOCUS ON SMALL DATASETS WHICH LIMITS THE PERFORMANCE OF AUDIO PATTERN RECOGNITION SYSTEMS Predicted label with spaces: ABSTRACT AUDLO PDTTERX RBCOGXJTJOX LS AX LMPORTDXT RBSF RCH TOPLC JX THE MD Y JD C HLXF DTDRXLXG DRTD AND LXCLJUDBS SBVBRAL TARSKS SUCH AS AUDLO TD TGGLXG ACOUSGLC SC T JBXB CBDSSLFLCDTLOX DXD SOUXD EV T JFXT DT BCTJOX RBCBXTLX XBURAD XBRRW ORKS HAVB BBBX APPLQBD TO SOLVB AUDJO PDTTJFRX RFCO TGXLTJOX PROBL M PR T J B S HOWEVJFR JFVLOUS SXSTBMS FOCUS OX SMAUL DATDS T JFTS N HLCH LLMLRFS THB PFRFORMDXCJT OF AUDLO PATTBRX RBCOGXQJLOX SXSHTBMS Accuracy: (182/401)